打印
[STM32F4]

NUCLEO-F446ZE评测之菜鸟学习1

[复制链接]
1291|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pkuzhx|  楼主 | 2016-5-8 21:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pkuzhx 于 2016-5-8 22:01 编辑

前一阵比较忙,一直没有发文。现在终于有空来搞一下了。
我是st新手,之前只用过F401,并且是用cubemx+IAR来做的,基本只用过GPIOTIMERI2CUSB等。所以,以我的水平,评测就谈不上了,只能是学习一下。我的学习计划分为两部分:
1 继续使用cubemx+IAR来开发F446,既检验自己之前所学,又可以给同样的新手一个详细的教程,看看不懂寄存器的菜鸟是如何一点点上手的。
2 使用mbed开发。很早就听说过mbed了,但一直没有用过,说实话也不太清楚它到底是个什么东西。趁这个机会正好从0开始学习一下,同样把学习过程也展示出来。
当然,最终还是要搞个东西出来的。我最后计划实现一款简单的心率波形显示软件:F446连接光学传感器,采集手指(或其他部位)的心率波形,然后上传数据到PC,在PC上做一个软件显示出来。
以后正确每周发一篇,至少5篇,在6月结束前把这个东西搞定(请原谅重度拖延症患者……)

第1节 cubemx之点亮LED

1cubemx新建工程
选择 newProject
选择对应型号
先保存一次,使用过程中也随时保存。注意cubemx与有道词典不兼容,别开有道就好。


2)参考文档
任务:循环点亮熄灭LD1LD2LD3三个LED。在UM1974 User manual中找到有关LED的描述:
可知LD1对应PB0LD2对应PB7LD3对应PB14,并且IO口高时LED亮。
我认为新手学习一款MCU时,只要大概知道该MCU有什么功能特性即可,需要学习哪一块就看哪一块的文档,其他功能该开始都不需要了解。


3cubemx设置IO
建立工程后,cubemx默认在pinout界面。一开始MCU的管脚很密(毕竟有144个脚),看不清楚,把光标放在MCU图标上,就可以用滚轮放大了。

找到PB0,单击鼠标,设置为GPIO_Output。同理设置PB7PB14
设置过的管脚是绿色的,而且有个小钉子。
设置完以后,发现左侧有些外设图标上有黄色的叹号或红色的×,这是因为这些外设需要用到PB0PB7PB14


4cubemx设置时钟
我们可以看到板子上的高频外部时钟(HSE X3)是没有焊接的,我们可以选用内部高频HIS RC时钟。但是为了学习时钟配置,这里决定使用ST-Link提供的外部时钟,关于还有什么其他可用的HSE,可以参照文档中的6.7.1 OSC clock supply
ST-Link提供8M时钟。

继续在pinout界面,选择左侧外设的RCC,在HSE一项中选择crystal/ceramic resonator
转到clock configuration界面。

首先在输入频率input frequency中填入8,因为ST-Link提供的8MHz的外部时钟;然后在PLL source MUX中选择HSE,要使用外部时钟;再在system clock Mux中选择HSE。注意这里选择HSEHIS时,后面时钟树的变化。设置完成后,时钟树图中没有红色警告则说明设置成功,否则要重新设置。


5)进一步配置
转到configuration界面。
单击GPIO,可以看到PB0PB7PB14的配置,我们不需要做更高级的配置,所以默认即可。


6)生成工程
点击齿轮 图标。
Project界面设置如下:
IDE项我选的是EWARM,即IAR for ARM,也可选择keil等其他工具,但生成的代码会有区别。
Code generator选择如下:
单击OK即可。
(一开始可能会弹出对话框说固件没有下载,按提示下载即可。如果下载速度过慢,可选择离线安装的方法,参考http://www.stmcu.org/module/forum/thread-601397-1-1.html,下载F4最新版1.11.0
生成完毕后打开工程。


7IAR中的操作
IAR要安装7.4以上版本,否则可能会没有F446

GPIO初始化的代码在gpio.c中:
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_14|GPIO_PIN_7, GPIO_PIN_RESET);

  /*Configure GPIO pins : PB0 PB14 PB7 */
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_14|GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}
操作GPIO的函数原型在stm32f4xx_hal_gpio.c中,我们要用到的就是
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
这一个函数。

对于函数的使用方法,直接看函数定义前面的注释即可。
* @param  GPIOx: where x can be (A..K) to select the GPIO peripheral for STM32F429X device or
  *                      x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices.
  * @param  GPIO_Pin: specifies the port bit to be written.
  *          This parameter can be one of GPIO_PIN_x where x can be (0..15).
  * @param  GPIO_PIN_x: specifies the value to be written to the selected bit.
  *          This parameter can be one of the GPIO_PinState enum values:
  *            @arg GPIO_PIN_RESET: to clear the port pin
  *            @arg GPIO_PIN_SET: to set the port pin
对于三个参数都说的很清楚,GPIOx参数的值为GPIOx,其中xABCD……;GPIO_Pin的值为GPIO_PIN_xx0-15GPIO_PIN_x值为PIN_RESETPIN_SET,分别为置高和置低。
然后在main.c中修改代码如下:

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
   
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
   
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);

  }
  /* USER CODE END 3 */
代码含义就是LD1~3依次点亮500ms然后熄灭。注意自己添加的代码一定要放到/* USER CODE BEGIN x */ /* USER CODE END x*/之间,否则在cubemx中更新过后,新生成的代码会把自定义代码覆盖掉。


8)下载看效果
单击IARmake图标 ,显示0error0 warning
然后通过USB连接F446PC(注意是ST-link端的USB),单击download and debug图标 ,然后再单击stop debugging(红X)

现在可以看到绿、蓝、红三个LED依次点亮、熄灭了!

image002.jpg (38.76 KB )

image002.jpg

image004.jpg (104.89 KB )

image004.jpg

image006.png (59.54 KB )

image006.png

image009.jpg (54.67 KB )

image009.jpg

image011.png (41.15 KB )

image011.png

image014.jpg (73.94 KB )

image014.jpg

image017.jpg (70.92 KB )

image017.jpg

image018.png (37.5 KB )

image018.png
沙发
pkuzhx|  楼主 | 2016-5-8 22:03 | 只看该作者
本帖最后由 pkuzhx 于 2016-5-8 22:06 编辑

附上cube 工程文件文件

f446_1.zip

817 Bytes

使用特权

评论回复
板凳
zhuotuzi| | 2016-5-8 23:11 | 只看该作者
如果放在某个关键点上的时候,弹出来解释说明就更完美了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:原来可以设置签名档啊!

45

主题

730

帖子

6

粉丝