一板网电子技术论坛

天南地北客
发表于: 2018-1-23 16:41:17 | 显示全部楼层

nucleo-f401re.jpg


本文将主要介绍如何使用STM32CubeMX和SW4STM32在Nucleo F401RE开发板上实现LED闪烁功能。我们不会非常详细介绍每一行代码。本教程的目的只是为了能够让LED闪烁。


启动CubeMX并点击New project

在下面的窗口中选择我们将使用的微控制器/开发板。在名为Board Selector的顶部选项卡中,这样做更容易,并且已经配置了该电路板特定的一些设置。作为供应商选择ST,因为这是唯一的选择。由于电路板选择Nucleo64,因为我们的电路板适合这个组。在MCU系列中选择STM32F4 - > F401RE。最后选择NUCLEO-F401RE,因为我们的微控制器是STM32F401RET6。并单击确定。

Nucleo-blinky-001.png

这是魔术发生的地方。我们需要的Blinky设置已经设置。我们需要的是告诉Cube存储我们的程序和我们将使用的编译器。

Nucleo-blinky-002.png

在菜单中点击Project > Generate Code

Nucleo-blinky-004.png

您需要输入项目名称,项目位置并将工具链/ IDE设置为SW4STM32。

项目名称只是您的程序的名称(我使用的做法是不使用名称中的任何空格,我使用下划线而不是空格)。

对于项目位置,我会建议您的SW4STM32工作区的位置。

选择SW4STM32作为工具链/ IDE。

其余的你可以保持原样,点击确定。

Nucleo-blinky-006.png

现在在菜单Project> Generate Code中选择。

Nucleo-blinky-007.png

项目生成后,将显示一个弹出窗口。点击打开项目,项目将被导入SW4STM32。

Nucleo-blinky-008.png

你应该从SW4STM32得到这个弹出窗口。这意味着您已经正确安装了CubeMX和SW4STM32。

Nucleo-blinky-009.png

现在点击Build Project(工具栏上的一个小锤子)。

Nucleo-blinky-010.png

这可能需要一段时间,但最后你必须在控制台中看到这样的文字。这意味着程序已经正确编译而没有错误。这里是我们开始用我们自己的代码编程的地方。

Nucleo-blinky-011.png

现在我们需要打开main.c并开始添加我们的程序。双击它,它将在编辑器中打开。


在LED开始闪烁之前,我们需要做一些事情:

- 配置PIN码A.5作为输出

- 在main.c的主要部分创建一个循环

- 在循环中添加延迟,以便我们可以看到LED闪烁


我们可以在第66页的pdf中找到LED所连接的引脚。下面是该连接的屏幕截图。

Nucleo-blinky-013.png

在我们开始向我们的项目中的任何文件添加代码之前,只需要在/ * USER CODE BEGIN * /和/ * USER CODE END * /之间添加代码是很重要的,这是因为在这之间它是什么您在CubeMX中重新生成项目。在CubeMX中重新生成项目时,所有这些内容都将被删除。


让我们将引脚配置为输出。使用Cortex-M微控制器,这比AVR或PIC稍微复杂一些。现在我们将使用一些命令来配置它,我们不会详细介绍它们各自的作用,因为在本教程中,我们只想让LED闪烁,以便了解我们的编译器和硬件的工作原理。要做到这一点,我们需要启用端口A的时钟。校正,所有的初始化在MX_GPIO_Init()函数中完成。

如果初始化不是由MX_GPIO_Init()函数完成的,我们需要将这一行代码添加到main.c中:

  1. /* USER CODE BEGIN 1 */
  2. __HAL_RCC_GPIOA_CLK_ENABLE();
  3. /* USER CODE END 1 */
复制代码

以上代码将启用端口A的时钟。


我们还需要将引脚配置为输出。我们用下几个代码来做到这一点:

  1. /* USER CODE BEGIN 1 */
  2. __HAL_RCC_GPIOA_CLK_ENABLE();
  3. GPIO_InitTypeDef Init_LED;
  4. /* USER CODE END 1 */
复制代码

下面的代码也不需要,因为MX_GPIO_Init()函数。

  1. /* USER CODE BEGIN 2 */
  2. Init_LED.Pin = LD2_Pin;
  3. Init_LED.Mode = GPIO_MODE_OUTPUT_PP;
  4. Init_LED.Pull = GPIO_NOPULL;
  5. Init_LED.Speed = GPIO_SPEED_FREQ_LOW;
  6. HAL_GPIO_Init(LD2_GPIO_Port, &Init_LED);
  7. /* USER CODE END 2 */
复制代码

上面的不必要的代码是为初学者解释一些事情。


接下来我们需要打开LED。

  1. /* USER CODE BEGIN 3 *
  2. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
  3. }
  4. /* USER CODE END 3 */
复制代码

现在我们可以尝试,如果它的工作。

首先,我们需要建立我们的程序(点击工具栏中的锤子)。在控制台你应该得到文本“Build Finished….”。这意味着程序编译成功。


之后,右键单击项目浏览器中的项目,然后选择Target -> Program chip…

Nucleo-blinky-014.png

它会打开以下窗口:

Nucleo-blinky-015.png

选中复选框Reset after program,编程后会复位开发板,否则需要在Nucleo上按复位(黑色按钮)才能启动程序,然后点击OK


经过一段时间,Nucleo的绿色LED应该点亮。


要使LED闪烁,我们现在需要的是添加延时以及将其关闭的指令。

我们需要添加两行代码:

  1. /* USER CODE BEGIN 3 */
  2. HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
  3. HAL_Delay(1000);
  4. }
  5. /* USER CODE END 3 */
复制代码

重新编译程序。


现在右键单击工具栏的里面是白色播放按钮的绿色圆圈旁边的向下箭头,然后选择Run As - > 1 Ac6 STM32 C / C ++ Application。这将用使用新的程序编程你的微控制器。在完成之后,您的程序将添加到程序列表中,如下图所示。之后,您可以选择您的程序,并且不再需要Run as -> 1 Ac6…将您最新编译的程序编程到微控制器中。

Nucleo-blinky-016.png

LED现在应该以1秒的间隔闪烁。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 35 | 回复: 53



手机版|

GMT+8, 2019-12-13 19:53 , Processed in 0.078124 second(s), 34 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表