一、板载ST-LINK仿真器
NUCLEO-G070RB开发板有一个板载ST-LINK仿真器,需要下载ST官方的驱动en.stsw-link009,安装到电脑才能识别,因为板载ST-LINK仿真器的驱动版本是st-link_v2.1。而单独安装st-link_v2_usbdriver是不能识别的。
二、第一个程序
从ST官网下载NUCLEO-G070RB开发板的示例代码,所有的工程都是由STM32CubeMX工具生成,保存格式为MDK(V5)和IAR两种版本。由于本人习惯MDK,且已经安装MDK 4.60和MDK5.23,如下图:
下面进入工程目录,打开第一个工程GPIO_IOToggle.uvprojx
双击打开后,如下图所示:
选择ST-linkDebugger
然后选择Flash-> Download
下载完成后,发现LED开始闪烁。
由于系统时钟是1ms,因此每秒LED闪烁5次,每次点亮和熄灭时间都是0.1s属于人眼可以分辨的状态。
然后打开工程GPIO_EXTI.uvprojx,同样的方法下载到开发板。
初始状态,LED4处于灭的状态。如下图:
按一下B1按键后,LED4点亮
再按一次B1按键,LED4再次熄灭。
至此,第一个工程已经测试完毕。
三、测试串口
3.1、打开串口工程
打开后进行编译,如下:
由于开发板所给的串口程序是需要2个NUCLEO-G070RB开发板的串口互联来完成测试的,而串口发送完成和接收完成使用的是同一个全局变量UartReady。而本人只有一个开发板,需要修改程序如下:
将等待接收完成的while死循环屏蔽掉,如下图
由初始化部分MX_USART1_UART_Init()-> HAL_UART_Init(&huart1) -> HAL_UART_MspInit(huart) 得知,本程序初始化了USART1,并使用了PA9和PA10两个管脚,经查看原理图得知PA9接到CN5的第一脚,PA10接到CN9的第三脚,如下图:
其他串口特性初始化如下:
现用杜邦线将CN5的第一脚与CN9的第三脚相连,如下图:
点击Debug进入程序,打上2个断点,如下所示:
如果接收的数据和发送不一致,那么就会进入第一个断点,如果相同,就进入下一个断点。
现在开始全速运行程序,LED4每0.2s闪烁一次,然后按下B1按键,程序开始进入发送程序,发送完毕后,也即接收完成,此时判断接收和发送的数据是否相同,结果如下:
为进一步确认数据完全相同,打开监控Watch1,添加aRxBuffer和aTxBuffer,显示如下:
aTxBuffer:
aRxBuffer:
经仔细比对,接收数据和发送数据完全相同!
3.2、测试高速串口
本次申请开发板的主要目的就是测试一下STM32G0系列的高速串口。
现将串口速度调整为2Mbps,执行结果如下:
说明STM32G0系列的USART1在2Mbps下没有问题。
现将串口速度调整为6Mbps,程序死在初始化接到,经查,初始化USART1时候出现错误:
进入(HAL_UART_Init(&huart1)函数,进行仔细查看,发现在HAL_StatusTypeDefUART_SetConfig(UART_HandleTypeDef *huart)函数中,计算波特率时候出错,如下:
而UART_BRR_MIN = 0x00000010,UART_BRR_MAX = 0x0000FFFF。
经查手册STM32G070RB user manu.pdf,发现要在6Mbps下运行,需要满足2个条件,一是必须使用DMA,二是必须使用8位采样。由于本案例已经使用DMA,所以现将USART1初始化部分更改如下:
然后重新编译运行,并按一下按键B1,程序成功执行到如下位置。
查看接收和发送缓存区,接收数据和发送数据确实相同。
至此,STM32G070的USART1在6Mbps下的试验全部完成。下一步准备应用到本公司的远程IO设备中,以更换原来的STM32F051C8T6。
万分感谢斑主,给予该开发板,让我充分了解到STM32G070的性能。其他性能,诸如USB、ADC、Timer、SPI以及在开发板上运行FreeRTOS等有待下一次进行测试。