STM32串口通讯
一、基于寄存器与基于固件库的编程方式的差异
使用固件库,目前比较多的例程是使用固件库编写的。固件库编写方式,特点是简单易于理解,资料多。新手适合用这种方式入门。使用寄存器,想要深入理解CortexM3内核或是需要为了获得更好的可移植性,学习寄存器编程会比较有帮助。但是从专业的角度上看,寄存器更贴近底层,对外设的工作原理和运行机理会有更深的理解。
二、stm32串口通信实战
1、烧录代码的方式
使用的是stm32f103指南者,从电脑中下载程序到stm32有两种方式:
1.使用仿真线下载程序;
2.使用串口下载程序;
在这里我使用的是第二种方法。
先打开连接:点这里
提取码:pmf1
打开后,开发软件这个文件夹,然后下载图中圈出的三个压缩包
然后用usb线把stm32开发板和电脑相连接,stm32端连接的 ‘usb转串口’这个接口,再打开stm32开关,可以看到红色的小灯亮起。开发板上有黄色跳帽,是相当于导线的作用,此处要求BOOT0和BOOT1接地,RXD接A9,TXD接A10,开发板买来默认就是这样接的,所以不需要改动。
找到刚才下载的资源里面的CH341SER.EXE,安装
找到并打开串口下载助手mcuisp
然后按如下方式配置:①搜索串口,设置波特率 115200(尽量不要设置的太高) ,②选择要下载的 HEX 文件、③校验、编程后执行、④DTR 低电平复位,RTS 高电平进入 bootloader、⑤开始编程。
2、代码及效果图
该串口通信实现以下功能:
1)设置波特率为115200,1位停止位,无校验位。
2)STM32系统给上位机(win10)连续发送“hello windows!”,
3)当上位机给stm32发送“Stop stm32!”后,stm32停止发送。
先在刚刚下载资源的百度云链接中下载模板
打开后把其中stm32f10x_it.c文件的串口中断服务函数部分改为如下:
int i=0;
uint8_t ucTemp[50];
void DEBUG_USART_IRQHandler(void)
{
if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
{
ucTemp[i] = USART_ReceiveData(USART1);
}
if(ucTemp[i] == '!')
{
if(ucTemp[i-1] == '2'&&ucTemp[i-2] == '3'&&ucTemp[i-3] == 'm'&&ucTemp[i-4] == 't'&&ucTemp[i-5] == 's'