文章目录
基于寄存器与基于固件库的stm32 LED流水灯例子的编程方式有什么差异。
- 固件库就是函数的集合,固件库函数的作用就是:向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。对于STM32这种级别的MCU,数百个寄存器记起来何谈容易,于是推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一套API供开发者使用。大多数情况下,你不需要知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。
STM32的USART窗口通讯程序
功能实现:
1)设置波特率为115200,1位停止位,无校验位。
2)STM32系统给上位机(win10)连续发送“hello windows!”,上位机接收程序可以使用“串口调试助手“,也可自己编程。
3)当上位机给stm32发送“Stop,stm32”后,stm32停止发送。
本次基于另一相似功能代码做修改
该代码功能实现串口中断接收回显
文件配置及初始代码的参考网站
一些初始化函数的功能介绍上面的网站都有,不再赘述
发送字符函数
方框内两函数功能相同,为发送8bit数据

发送字符串函数
将字符串拆分为多个字符,循环调用发送字符串函数

中断函数
- 初始代码为

它定义了一个8bit的字符,使用if语句来判断是否是真的产生USART数据接收这个中断事件,如果是真的就使用 USART 数据读取函数USART_ReceiveData 读取数据到指定存储区。然后再调用USART 数据发送函数 USART_SendData 把数据又发送给源设备。函数功能为让接收端输出发送端输入的字符串。
为实现我们想要的功能,将中断函数修改为:
int i=0;
uint8_t a[11];
void USART1_IRQHandler(void)
{
//uint8_t temp;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
a[i++] = USART_ReceiveData(USART1);
//USART_SendData(USART1, a[i-1]);
}
if(a[0]=='S'&&a[1]=='t'&&a[2]=='o'&&a[3]=='p'&&a[4]==','&&a[5]=='s'&&a[6]=='t'&&a[7]=='m'&&a[8]=='3'&&a[9]=='2')
while(1);
}
在中断函数外部定义一个数组和i,由于中断函数会循环调用,发送端的字符串将会被拆分成单个字符存储在数组中,当发送端发送了“Stop,stm32”时,第二个if语句为真,进入while(1)永真循环,达到终止函数的目的
主函数
在主函数文件中定义一个延时函数
void Delay_ms(volatile unsigned int t)
{
unsigned int i,n;
for(n=0;n<t;n++)
for(i=0;i<800;i++);
}
主函数while语句中添加
User_UART_Send_String(USART1, "hello windows!\n");
Delay_ms(5000);
代码实现持续向接收端发送"hello windows"

编译后,用USB线连接开发板的USB转串口跟电脑,在电脑端打开串口调试助手并配置好相关参数:115200 8-N-1,把编译好的程序下载到开发板,此时串口调试助手即可收到开发板发过来的数据。
可到野火官网中下载相关工具:
野火产品网站
打开串口调试助手,开启串口后接收端持续输出,发送端发送指定内容后,接收端停止输出

STM32 USART串口通讯
本文介绍STM32通过USART实现串口通讯的方法,包括设置波特率、停止位等参数,并实现连续发送字符串功能。当接收到特定指令时,STM32能够停止发送。文章还提供了基于中断接收的实现细节。
251

被折叠的 条评论
为什么被折叠?



