当前位置: 首页> 财经> 访谈 > 广州最新疫情动态_个人简历可编辑免费_网络公关公司联系方式_seo优化厂商

广州最新疫情动态_个人简历可编辑免费_网络公关公司联系方式_seo优化厂商

时间:2025/7/11 14:49:51来源:https://blog.csdn.net/rxy0727/article/details/146062116 浏览次数:0次
广州最新疫情动态_个人简历可编辑免费_网络公关公司联系方式_seo优化厂商

目录

一:串口发送

二:串口接收 

  三:串口查询的两种方法

1.查询

函数: USART_ GetFlagStatus

函数:USART_ ReceiveData  

代码: 

结果: 

2.中断

第一步:开启RXNE标志位到NVIC的输出

函数USART_ITConfig

第二步:配置NVIC

函数NVIC_PriorityGroupConfig

函数NVIC_Init  

配置NVIC代码:

函数封装

结果:

四:学习心得 

USART的配置和使用方法


 

一:串口发送

串口发送--原文链接:https://blog.csdn.net/rxy0727/article/details/1460446498 

二:串口接收 

  • 在串口发送初始化部分上加上接收的部分
  • 首先是GPIO口,要使用RX引脚,在引脚定义表里可以知道,USART的RX复用在PA10引脚。所以要再初始化一下PA106
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure); 

  • 在USART_Mode中加上串口模式RX,就开启了同时发送和接收部分 
        //配置USARTUSART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; 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_Tx | USART_Mode_Rx;  USART_Init(USART1, &USART_InitStructure); 

  三:串口查询的两种方法

1.查询

如果使用查询,那初始化到上一步就结束了,查询的流程是,在主函数里不断判断RXNE标志位,如果置1了,就说明收到数据了。再调用ReceiveData,读取DR寄存器。

函数: USART_ GetFlagStatus

函数功能检查指定的 USART 标志位设置与否

参数1:USARTxx可以是12或者3,来选择USART外设

参数2:USART_FLAG:待检查的USART标志位

由状态寄存器USART_SR可得,读DR可以自动清除标志位,所以不需要重新清除标志位 

 

函数:USART_ ReceiveData  

函数功能:返回USARTx最近接收到的数据

参数:USARTxx可以是12或者3,来选择USART外设

代码: 

while(1){if(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == SET){//如果if成立RxData = USART_ReceiveData(USART1);OLED_ShowHexNum(1,1,RxData,2);}}

结果: 

 

2.中断

如果使用中断,则还需要开启中断,配置NVIC.

第一步:开启RXNE标志位到NVIC的输出

函数USART_ITConfig

函数功能:使能或者失能指定的USART中断

参数1:USARTxx可以是12或者3,来选择USART外设

参数2:USART_IT:待使能或者失能的USART中断源

输入参数 USART_IT 使能或者失能 USART 的中断。可以取下表的一个或者多个取值的组合作为该参数的值。

代码: 

USART_ITConfig(USART1, USART_IT_RXNE ENABLE);

第二步:配置NVIC

函数NVIC_PriorityGroupConfig

函数功能:设置优先级分组:先占优先级和从优先级

参数:NVIC_PriorityGroup:优先级分组位长度

该参数设置优先级分组位长度,见下表
函数NVIC_Init  

功能描述:根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

NVIC的相关函数:

  • NVIC_IRQChannel
    该参数用以使能或者失能指定的 IRQ 通道
  • NVIC_IRQChannelPreemptionPriority
    该参数设置了成员 NVIC_IRQChannel 中的先占优先级
配置NVIC代码:
//配置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure(&NVIC_InitStructure); 

 

总结:RXNE一旦置1,就会向NVIC申请中断,之后就可以在中断里接收数据

函数封装
uint8_t Serial_GetRxFlag(void)
{if(Serial_RxFlag == 1){Serial_RxFlag=0;//读后自动清除功能return 1;}return 0;
}uint8_t Serial_GetRxData(void)
{return Serial_RxData;
}void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1, USART_IT_RXNE)== SET){//如果置1了就进入ifSerial_RxData = USART_ReceiveData(USART1);Serial_RxFlag = 1;//读完之后置一个自己的标志位USART_ClearITPendingBit(USART1, USART_IT_RXNE);//清除标志位}
}

 

主函数调用

while(1){if(Serial_GetRxFlag()==1){//如果if成立RxData = Serial_GetRxData();Serial_SendByte(RxData);//数据回传OLED_ShowHexNum(1,1,RxData,8);}}
结果:

四:学习心得 

在这个学习过程中,对USART通信有了更清楚的认识

USART的配置和使用方法

配置STM32的USART主要包括以下几个步骤:

  1. 初始化‌:设置波特率、数据位、停止位和校验方式。
  2. 发送数据‌:通过USART_SendData函数发送数据,并等待发送缓冲区为空。
  3. 接收数据‌:使用USART_ReceiveData函数接收数据,并处理接收到的数据。
  4. 中断处理‌:配置中断源,处理接收和发送完成的中断事件。

今天也是收获满满的一天,开心!!! 

关键字:广州最新疫情动态_个人简历可编辑免费_网络公关公司联系方式_seo优化厂商

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: