首先感谢EEPW提供的这次机会,学习了不少东西。
一、 硬件与软件
本次课程的硬件是:STM32H503RBT6开发板,白色的pcb板很好看,如下图
开发板上自带了 st-link 仿真器,方便开发调试,特别好!
软件我还是习惯使用 Keil5,本机上安装有 Keil-MDK 版本是 v5.36, 虽然不是最新的,但它是最后一个同时自带有 arm compiler v5 和 v6 两个编译器的版本。就不升级keil了,就用v5.36吧~~
值得一提的是,开发需要一根typeC的数据线。我之前用的typeC线,下载STC的代码都没有问题,查到这个板子上,只有红色的LED(丝印是COM)部分点亮,而标着PWR的电源LED不亮,真是奇怪。后来又网上买了根号称typeC“数据线”而不是“充电线”的,插上去才一切正常。而且开发板一插上typeC线,电脑上会多出一个U盘盘符,大小只有416K,里面有三个文件,这在其他开发板上我还没见过。
二、 Keil5安装STM32H503芯片支持包
要使用Keil5开发STM32H503芯片项目,需要安装对应的DFP支持包。
官网的下载地址为:https://www.keil.arm.com/packs/stm32h5xx_dfp-keil/devices/
点击上图中的红圈,下载后大小71.4M。双击安装,这样在Keil中就可以查看到STM32H5xx的芯片了,新建工程时候也可以选择H5xx的芯片了。如下图:
在图中,直接点击蓝色的文字,也可以跳转到官网的DFP包下载页面。
注意: 第一次使用ST-Link,需要安装st-link的驱动。官方ST-Link驱动下载地址:
https://www.st.com.cn/zh/development-tools/stsw-link009.html
安装好驱动,在设备管理器里可以看到设备:
可以看到,我电脑上st-link的虚拟串口为COM10
三、 使用CubeMX 配置外设,并生成模板
STM32CubeMX软件是官方出的外设配置工具,可以用它很方便的生成项目模板,也可以配置引脚功能,极大提高开发效率。CubeMX可在官网下载:
https://www.st.com.cn/content/st_com/zh/stm32cubemx.html#st-get-software
下载后直接运行。CubeMX是基于java的UI一股傻傻的工业风~~不要介意这些,先生成个模板试试:
(1) 选择MCU型号: 搜索H503RBT6
点击右上角,开始生成工程。通过图形界面继续配置mcu各个引脚功能和外设:
(2) 配置为外部晶振,并设定主屏为250MHz
这部分照着学习视频做即可。
(3) 配置调试串口为SWD模式
使用串口USART3并设置波特率等:
(4) 配置PA5引脚为推挽输出模式
(5) 生成模板和代码:
注意要生成 MDK-ARM 的模板,因为我的keil 版本v5.36,所以最小版本选一个小于5.36的,如图中选择v5.32.
最下方需要H5xx系列MCU的 Fireware Package固件包。可以让CubeMX自动下载,也可以手动官网下载后解压,然后指定固件的包所在的本机路径。官网下载地址:https://www.st.com/en/embedded-software/stm32cubeh5.html
最新固件包为v1.2.0,文件名:stm32cube_fw_h5_v120.zip,下载大小为:178M
(6) 生成代码,配置iCache
既然能提高性能,那就Yes吧。 生成代码成功,显示如下:
第一个按钮,在文件管理器中打开生成的代码;第二个直接在keil-MDK中打开生成的工程
四、 添加功能代码
(1) 首先编译下,并下载测试
可以看到,生成的用户程序,主要在main.c 中,有main函数,时钟配置 SystemClock_Config函数,错误处理 Error_Handler函数等几个主要函数。
点击标题栏编译按钮,最后无错误: 0 Errors,0 Warning。
接着就可以添加 自己的用户代码,来实现三个要求的功能中的后两个:
哦,忘了下载测试了。如果st-link的驱动都安装没问题,点击工具栏下载图标,
底部输出栏一闪而过,提示下载成功。
(2) 实现打印字符串到usart3
Main文件中先定义一个字串:
/* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ const char hello_str[]= "Hello EEPW! Hello STM32H503!\r\n"; /* USER CODE END 0 */
查看HAL库中使用串口发送的函数
在main函数的循环中,调用发送函数:
while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_Delay(500); //延时200ms HAL_UART_Transmit(&huart3, (uint8_t*)hello_str, strlen( hello_str),100); }
这里我们将 字符串hello_str转化为 HAL_UART_Transmit函数需要的类型uint8_t*, 若不转换也是可行的,如视频教程中所示会有一个 warning,不影响。
另外若找不到 strlen() 函数,添加c标准库 #include “string.h”
/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "string.h" /* USER CODE END Includes */
编译下载后,打开你喜欢的串口软件,设置好波特兰和COM10端口,正常接收到单片机发送的数据:
(3) 闪烁LED灯---PA5引脚
PA5引脚,使用CubeMX已经生成了初始化代码,GPIO被设置为推挽输出模式。代码中只需要每隔一定时间,让PA5输出反向即可。
首先来看下HAL库中GPIO的相关操纵函数:
在main函数的 while循环中,添加一行pin针脚翻转的代码即可:
while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_Delay(500); //延时200ms HAL_UART_Transmit(&huart3, (uint8_t*)hello_str, strlen( hello_str),100); HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); //PA5翻转 }
编译下载,看看效果:
搞定,完工! #
工程源码:LEDdemo.rar
讲解视频地址:
https://www.bilibili.com/video/BV1SH4y1F7Cf