STM32的USART窗口通讯实现

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

基于寄存器与基于固件库的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,把编译好的程序下载到开发板,此时串口调试助手即可收到开发板发过来的数据。

可到野火官网中下载相关工具:
野火产品网站

打开串口调试助手,开启串口后接收端持续输出,发送端发送指定内容后,接收端停止输出
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值