基本作业:1.使用STM32CubeMX图形化配置软件,配置STM32H503RB芯片的内部参数,外设参数,引脚分配等功能;
2.在学习完成全部讲解与实验后,在STM32H503RB开发板成功烧录程序,并编写软件代码实现LED灯周期闪烁,串口打印字符串"Hello EEPW & DigiKey! Hello STM32H503!";
使用工具:STM32CubeMX + keil。STM32CubeMX软件负责图形化配置板卡,keil负责编程。
step1:打开STM32CubeMX软件,这里我们通过板卡来创建工程。
在这里,可以通过图形化方式配置管脚功能,和单片机时钟、通讯等的配置。这里需要驱动LED灯和串口,就需要阅读Nucleo-H503RB板子的原理图。从原理图可以看出,有个LED2是接在PA5脚的。这里要留意,这个Nucleo板子上有两颗STM32芯片,其中一颗是用来做STLINK的烧写用芯片。这里自己犯了个错,看见LED1灯接在了管脚PA10上,就想着去驱动PA10,结果LED1就是没反应,再仔细看电路图,才发现搞混了两颗芯片,看错了图。
点击左侧,可以看见PA5已经被设置好了,给了个标签“USER_LED”,一会在代码中就可以直接使用这个标签了。
再看电路图,得知stlink的串口是接入到USART3上,并且USART3已经做过配置,波特率使用的是115200。其它部分暂时不做改动,点击“Project Manager”写入工程名,选择自己的编程工具(我这里选择MDK-ARM),最后点击“GENERATE CODE”即可生成对应的工程。
step2:使用keil打开工程。
在user/core下找到main.c文件,打开进行编辑。找到文件中的“/* USER CODE BEGIN 3 */”字段,在这后边添加代码:
/* USER CODE BEGIN 3 */ HAL_GPIO_TogglePin(USER_LED_GPIO_Port,USER_LED_Pin); HAL_Delay(500); HAL_UART_Transmit(&huart3, "Hello EEPW & DigiKey! Hello STM32H503!\n", sizeof("Hello EEPW & DigiKey! Hello STM32H503!\n"), 100); } /* USER CODE END 3 */
这里留意,添加的代码一定要在 “/* USER CODE BEGIN 3 */”和 “/* USER CODE END 3 */”之间,这样之后如果项目有修改,使用STM32CubeMX修改项目配置时,自己的代码能够被保留。检查keil的烧写配置,烧录工具选择STLINK ,点击编译,然后就可以正常烧写了。烧写完成,按一下复位键(reset)就可以看见板子上的绿色LED灯不停地闪烁,使用串口通讯工具,设置波特率115200,打开串口,就可以收到串口传来的数据了。
step3:修改一下,使用printf输出。
这里的串口输出太麻烦,不够优雅。C语言中,常用的输出语句是printf,这里将printf重定向到串口上。首先添加库(stdio.h)的引用
/* USER CODE BEGIN Includes */ #include "stdio.h" /* USER CODE END Includes */
再重构fputc函数
/* USER CODE BEGIN 0 */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xffff); return ch; } /* USER CODE END 0 */
然后,在keil的编译环境中添加use MicroLIB的支持。就可以在代码中使用printf来输出信息到串口啦!