STM32‘UART

STM32串口通信&STM32与K210通信的实现

待修整

STM32串口通信介绍

  • STM32串口通信就是设备之间的数据传输协议,实现数据传输的功能
    设备之间数据成功传输的关键就是协议的一致性,就比如STM32与K210的通信

STM32串口通信的数据形式

  • STM32串口通信的数据传输是以数据包的形式,可以理解为数组

数组内容: 起始位+有效数据+校验位+停止位
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B5GnEoAi-1665844164000)(2022-10-15-17-35-00.png)]


以上为设备之间进行通信的依据

STM32串口通信配置(以串口1为例)

  1. 定义结构体变量
GPIO_InitTypeDef GPIO_InitStructure; // IO口配置结构体
USART_InitTypeDef USART_InitStructure; //串口配置结构体
NVIC_InitTypeDef MVIC_InitStructure; // 中断配置结构体
  1. 使能串口与GPIO时钟
// 使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);
  1. 相关配置
// 串口复位
USART_DeInit(USART1);
// GPIO端口模式设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure);
// 串口参数初始化

USART_InitStructure.USART_BaudRate = bound; // 波特率配置
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 字节长为8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; // 一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No; // 无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx // 收发模式配置

// 串口初始化
USART_Init(USART1,&USART_InitStructure);

 #if EN_USART1_RX
// 初始化NVIC
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

// 开启中断
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE)
 #endif

//使能串口
USART_Cmd(USART1,ENBALE);

4.主函数配置

uart_init(9600);
NVIC_PriorityGroupCmd(NVIC_PriorityGroup_2);

STM32串口通信中断解析

正点原子历程中数据结束标志为0X0D,0X0A


void USART1_IRQHandler(void)                	
	{
	u8 Res; // 接受数据变量
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)   // 判断是否开启中断
		{
           
		Res =USART_ReceiveData(USART1);	 //将串口接受数据传递给Res 
		// 此处为第三步 
		if((USART_RX_STA&0x8000)==0)  // USART_RX_STA接收状态标志位,此时未完成数据传输
			{
               //此处为第二步 
			if(USART_RX_STA&0x4000)  // 接收到数据是0X0D,判断下一位数据,如果为0x0a传输结束,否则从头进行传输
				{
				if(Res!=0x0a)USART_RX_STA=0;
				else USART_RX_STA|=0x8000;	 
				}
			else 
				{	
				if(Res==0x0d)USART_RX_STA|=0x4000; //接收到数据为0x0d,将状态位赋值为0X4000
				else
					{
                    // 整个函数在此处开始运行 
					USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
					USART_RX_STA++;
					if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;	  
					}		 
				}
			}   		 
     } 

串口通信波特率

串口通信的速率用波特率表示,它表示每秒传输二进制数据的位数,单位是bps(位/秒)常用的波特率有9600,19200,38400,67600以及115200等。

  • 波特率计算1
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p2xPyc1a-1665844163796)(2022-10-15-22-23-29.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fn63xNy4-1665844163798)(2022-10-15-22-24-11.png)]

STM32与K210通信

未完待续…

中…(img-p2xPyc1a-1665844163796)]
[外链图片转存中…(img-Fn63xNy4-1665844163798)]

STM32与K210通信

未完待续…


  1. 图片源于https://blog.csdn.net/k666499436/article/details/124354165?spm=1001.2014.3001.5506 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值