protocol_v1.0.1的程序学习及STM32数据串口的数据发送和接收学习的笔记

这篇博客详细记录了STM32数据串口的发送和接收过程,包括如何改进发送数据的函数以适应多字符传输,以及接收数据时的中断服务程序优化。此外,还探讨了Protocol_v1.0.1程序学习中的协议温习,特别是数据结构的定义,如消息流水号、设备ID和功能ID的长度等。
摘要由CSDN通过智能技术生成

STM32数据串口传输

主要参考文章:STM32F407串口STM32 串口接收和发送数据的方法STM32串口发送数据和接收数据方式总结
通过这几个文章以及网络上其他信息的学习总结如下:

发送数据

最直接的便是使用void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);第一个参数是发送的串口号,第二个参数是要发送的数据了。
但这个只能进行单个字符的传输,所以对其进行修改补充,来满足一次多字符的传输;
在最开始看到的文章中是使用了这样的一个模板:

	USART_SendData(USART1, '2');  
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
 	printf("\r\你发送的消息为:\r\n");

但考虑到进行项目实操过程中,使用这样的模板就使得程序过于重复,因此找到方法将其打包成一个函数进行使用:

void Send_data(u8 *s)
{
   
	while(*s!='\0')
	{
    
		while(USART_GetFlagStatus(USART1,USART_FLAG_TC )==RESET);	
		USART_SendData(USART1,*s);
		s++;
	}
}

逻辑是通过循环调用USART_SendData来一 一发送我们的字符串。while(USART_GetFlagStatus(USART1,USART_FLAG_TC )==RESET);这句话是用于检查串口是否发送完成的标志,如果不加这句话会发生数据丢失的情况。目前是只能使用串口1进行发送,当使用到多个串口是就需要再加一个串口参数:

void Send_data(USART_TypeDef * USARTx,u8 *s)
{
   
	while(*s!='\0')
	{
    
		while(USART_GetFlagStatus(USARTx,USART_FLAG_TC )==RESET);	
		USART_SendData(USARTx,*s);
		s++;
	}
}

经参考文章得知这样在使用过程中虽然可以较为正常的使用,但是不能很完美的运行,因此这里抄了一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值