当前位置:网络安全 > stm32f103串口中断接收数据程序(stm32串口接收中断)

stm32f103串口中断接收数据程序(stm32串口接收中断)

  • 发布:2023-10-06 17:41

stm32f103串口中断接收数据程序(stm32串口接收中断)

stm32串口中断发送和接收是怎么回事?串口中断模式和查询模式有什么区别?

采用中断接收和发送方式,可以随时响应串口的接收和发送请求,提高串口响应时间;
程序中步骤如下:
首先:在void RCC_Configuration(void)中配置串口时钟;并在 void GPIO_Configuration(void); 中配置引脚。
RCC_PCLK2Config(RCC_HCLK_Div1); //确定串口波特率
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA||RCC_APB2Periph_USART1, ENABLE);
/* 配置USART1 RTS(PA12)和USART1 Tx(PA9)为复用功能推挽 根据数据可以找到对应的引脚*/
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9;
GPIO_InitStructure. GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Structure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);
其次:在void NVIC_Configuration(void)函数中使能串口中断;
/* 使能 USART1 中断 */
NVIC_InitStructure .NVIC_IRQChannel = USART1_IRQChannel; //通道设置为串口1中断(所以后面应该在“void USART1_IRQHandler(void)”中选择使能中断)
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //中断优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //中断响应优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //打开中断
NVIC_Init(&NVIC_InitStructure);
下一步。配置串口并使能中断
/* 使能 USART1 中断 */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel; //通道设置为串口1中断(所以后面“void USART1_IRQHandler(void)”中应该选择使能中断)
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //中断优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //中断响应优先级0
NVIC_InitStructure.NVIC_IRQChannelCm d = ENABLE; //开启中断
NVIC_Init( &NVIC_InitStructure);
最后可以在stm32f10x_.it.c中的void USART1_IRQHandler(void)函数中编写串口中断发生时的中断服务函数;
u8 RX_dat; //定义字符变量
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断发生了接收中断
{
RX_dat=(USART_ReceiveData(USART1) & 0x7F); //接收数据,排序并去掉前两位
USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET ){}//等待接收结束
// USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); //关闭中断
USART_SendData(USART1,RX_dat); //发送数据
}

程序实现功能:当通过串口发送数据时,程序进入串口中断服务程序,在中断服务程序中将接收到的数据发送出去;

stm32串口中断接收问题----问题是无法接收输入数据。

程序思路如下。进入中断后:
接收陀螺仪数据。如果收到的第一个字节不是0x55,则不会收到。 。此时,计数器不增加。 。
如果接收到的第一个字节是 0x55,则计数器递增,并且接收到的数据暂时存储在 Temp 中。 。 。
当 counter 增加到 11 时,Temp 接收到的数据存入 Re_buf,同时 counter 被清零,sign 置为 1
第一行的意思是如果接收寄存器没有空,有数据,则判断为接收中断
第五行为跳转中断

以上是小编对stm32f103串口中断接收数据程序(stm32串口接收中断)及相关问题的解答。 stm32f103串口中断接收数据程序(stm32串口接收中断)问题希望对您有用!

相关文章