本帖最后由 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)
|