发新帖本帖赏金 5.00元(功能说明)我要提问
返回列表
打印
[STM32F4]

【F446RE开发板试用】初试CUBE-点亮LED-USART中断模式收发

[复制链接]
2464|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wind~风|  楼主 | 2015-10-16 23:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wind~风 于 2015-10-16 23:40 编辑

当时申请这款STM32F446 Nucleo板子时,写的第一个理由就是学习CUBE开发,


刚开始接触CUBEMX这个软件和它用的HAL库,有个感受就是软件挺好用,挺方便的,省去了很多初始化代码的编写,但是这个库嘛,着实有点麻烦,封装比较厉害,看起来费劲,想要弄懂还得多花些功夫。
下面开始开发笔记:

准备工作:
安装Nucleo需要的各种驱动,如果以前已经安装,则不需要
安装CUBEMX最新版软件,并且安装F4的HAL库,怎么安装论坛都有很多帖子,就不写了


1.点亮LED,
   万年不厌的实验,比较简单,直接和后面第二个一起说
2.USART中断模式收发数据
-打开CUBEMX软件,点击页面New Project或者选择File-New Project或快捷键Ctrl+N


-弹出窗口MCU Selector标签中可以根据产品系列,产品线,封装等信息选择芯片的型号
-直接点击Board Selector可以根据开发板型号选择,直接选Nucleo -- STM32F4,可以在下面找到F446 Nucleo的板子,这样做的好处是选择确定后,会直接cube会直接根据板子上硬件配置和连接,初始化该部分的设置,免去我们自己设置的麻烦。

-最后点击OK,就可以来到具体设置界面了,第一页是Pinout,设置引脚功能的,左边有各功能模块设置。可以看到芯片上有些引脚已经设置好了,比如SWDIO等,PA5和PC13也已经设置好,分别是板子上的LED和按键连接的引脚,LED引脚设置为输出模式,按键引脚外部事件模式。
-绿色表示设置正确,黄色表示警告,该功能还有其他部分未设置完成,暂时不管

-第二个页面,Clock Configuration,设置时钟,这里只做测试,用默认的就好,默认使用HSI,系统频率84M,

-回到Pinout页面,将PA2和PA3分别设置为USART2_TX,USART2_RX,此时引脚变黄色,是因为还没有开启USART2,在左边找到它,Mode里面是Disable,改成Asynchronous,即异步模式,再看PA2,PA3,变绿了,设置正确,其他不变,默认不适用硬件流控

-到第三个页面,Configuration,每个模块的具体配置,点进去可以查看和修改配置,比如点GPIO,可以看到PA5配置为推挽输出,PA2配置为复用上拉等等。

-由于其他的已经根据选择的开发板自动配置好,主要需要配置USART2,

-点USART2,弹出参数设置窗口中,基本参数使用默认的就行了,波特率115200,8数据位1停止位无校验位,
-由于使用中断模式,需要在NVIC Settings中打开USART2全局中断,勾选中就行了,DMA不使用,不用管,这里也可以看到对应GPIO的设置并且可以修改




至此,所有的配置就完成了,可以生成工程了,点快捷键或者Project-Generater Code,会跳到工程设置页面,也可以先设置再生成,Project-Settings
-填写工程名字,选择工程存放路径,选择编译器,我用的MDKv5版本,有IAR,TrueSTUDIO等多种可选
-然后Code Generation页面,注意一定要选上Keep User Code When re-generating,默认已选,这样当重新用cube修改工程时,自己写的代码才不会被删除(必须写在指定位置才不会)。
其他的根据情况选就行



-最后点击OK就可以生成MDK工程了,生成工程后用MDK打开工程,

-在main函数中,找到while循环里,加入代码:
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
  HAL_Delay(500);



注意一定要写在/* USER CODE BEGIN x */和/* USER CODE END x */之间,当重新修改工程,代码才不会被删除,否则后果严重。
代码就两行,很简单,就是实现LED0.5s闪烁,编译下载运行,一切如预想一样,第一步完成。



-下一步,找到HAL_UART_MspInit函数,在末尾加入:
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
开启接收寄存器非空中断

-然后打开stm32f4xx_it.c文件,在void USART2_IRQHandler(void)函数中加入:
if(__HAL_UART_GET_IT_SOURCE(&huart2,UART_IT_RXNE)!=RESET)//判断中断源
{
        HAL_UART_Receive(&huart2,&a,1,0xffff);                                        //接收
        a++;
        HAL_UART_Transmit(&huart2,&a,1,0xffff);                                //发送
}



a是事先定义好用来存放接收数据的变量。
-最后的最后,编译下载运行,从串口助手向板子发送数据,芯片接到数据后将它加1,再发回来




后记:虽然是两个最简单最基础的实验,但是由于刚开始接触CUBE,对这个软件,对STM32 HAL固件库都不熟悉,特别是这个库,刚开始觉得很麻烦很难搞,花了挺多时间才算有了点眉目,总算也是有点收获,没有辜负社区给板子给我们试用的恩德啊,后面还有跟多东西等着去琢磨。。虽然写这个笔记很多截图,麻烦得很,不过还是花了不少时间来整理资料,整理思路,写了一下,自己也加深映像,更可以留着以后自己万一忘了什么备查。如果能顺便帮到其他人,那自然是极好的。


最后后后:附上工程 STM32F446_HAL.rar (3.68 MB)


打赏榜单

21ic小喇叭 打赏了 5.00 元 2015-10-30

沙发
734774645| | 2015-10-17 22:48 | 只看该作者
一点点认真看完了楼主的帖子,收获好大

使用特权

评论回复
板凳
wind~风|  楼主 | 2015-10-17 23:25 | 只看该作者
734774645 发表于 2015-10-17 22:48
一点点认真看完了楼主的帖子,收获好大

谢谢:)

使用特权

评论回复
地板
wind~风|  楼主 | 2015-10-19 09:51 | 只看该作者
自己再看看自己的帖子

使用特权

评论回复
5
734774645| | 2015-10-19 13:36 | 只看该作者
在NVIC Settings中打开USART2全局中断。这个好贴不能沉啊。

使用特权

评论回复
6
wind~风|  楼主 | 2015-10-19 17:28 | 只看该作者
734774645 发表于 2015-10-19 13:36
在NVIC Settings中打开USART2全局中断。这个好贴不能沉啊。

谢谢支持:lol

使用特权

评论回复
7
wind~风|  楼主 | 2015-10-30 13:38 | 只看该作者
感谢版主打赏,就是不知道这个5元是不是真正的5元*币

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

324

帖子

4

粉丝