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

stm32 串口中断发送和接收怎么回事,就是串口的中断方式和查询方式有什么区别?,第1张

USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);这个是判断串口是否触发接受(USART_IT_RXNE)中断,如果为发送中断则为(USART_IT_TXE),若产生中断则接受产生的8位2进制数据,而那个i的设置我猜测是楼主要接受字符串而设定的初值,发送完成则晴空标志位

函数是放在stm32f10x_itc中的 中断名称都是固定的stm32f10x_ith 中有一些可以作为参考。 写完中断函数不要忘记 设置中断向量入口地址 和中断向量组 开相应的中断!就可以了

使用中断接收发送方式,可随时响应串口的接收发送请求,提高串口响应时间;

在程序上 *** 作步骤如下:

首先:在void RCC_Configuration(void)中配置好串口时钟;及在void GPIO_Configuration(void)配置好管脚;

RCC_PCLK2Config(RCC_HCLK_Div1); //串口波特率的确定

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA||RCC_APB2Periph_USART1, ENABLE);

/ Configure USART1 RTS (PA12) and USART1 Tx (PA9) as alternate function push-pull 根据资料可查得各管脚对应/

GPIO_InitStructureGPIO_Pin =GPIO_Pin_9;

GPIO_InitStructureGPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructureGPIO_Mode = GPIO_Mode_AF_PP; //推挽输出

GPIO_Init(GPIOA, &GPIO_InitStructure);

其次:在 void NVIC_Configuration(void)函数中使能串口中断;

/ Enable the USART1 Interrupt /

NVIC_InitStructureNVIC_IRQChannel = USART1_IRQChannel; //通道设置为串口1中断(故后面应选择在“void USART1_IRQHandler(void)”开中断)

NVIC_InitStructureNVIC_IRQChannelPreemptionPriority = 0; //中断占先等级0

NVIC_InitStructureNVIC_IRQChannelSubPriority = 0; //中断响应优先级0

NVIC_InitStructureNVIC_IRQChannelCmd = ENABLE; //打开中断

NVIC_Init(&NVIC_InitStructure);

其次。配置好串口,并开中断

/ Enable the USART1 Interrupt /

NVIC_InitStructureNVIC_IRQChannel = USART1_IRQChannel; //通道设置为串口1中断(故后面应选择在“void USART1_IRQHandler(void)”开中断)

NVIC_InitStructureNVIC_IRQChannelPreemptionPriority = 0; //中断占先等级0

NVIC_InitStructureNVIC_IRQChannelSubPriority = 0; //中断响应优先级0

NVIC_InitStructureNVIC_IRQChannelCmd = ENABLE; //打开中断

NVIC_Init(&NVIC_InitStructure);

最后,可在stm32f10x_itc中的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); //发送数据

}

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

我看了一下代码

#define TIM_IT_Update ((uint16_t)0x0001)

#define TIM_FLAG_Update ((uint16_t)0x0001)

这两个值是一样的,用起来不会错但是代码不规范,两处地方都应该改用TIM_IT_Update,这样不会让人误解。

FlagStatus TIM_GetFlagStatus(TIM_TypeDef TIMx, uint16_t TIM_FLAG)

ITStatus TIM_GetITStatus(TIM_TypeDef TIMx, uint16_t TIM_IT)

这两个函数唯一的区别是中断函数TIM_GetITStatus()中多出来的itenable = TIMx->DIER & TIM_IT;

if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET))

对TIM的DIER寄存器额外进行了判断,才能执行time++

stm32f10x_itc中点中断服务函数调用其他文件的函数能通过编译但会出现警告,最好把相关的头文件添加进去就可以。

使用其他文件的全局变量一定要添加外部变量声明extern,如:

在AAAc中声明unsigned char a=0;

在BBBc中要调用该变量的话要也要声明extern unsigned char a;

以上就是关于STM32串口函数求教,这是什么函数啊,有什么作用全部的内容,包括:STM32串口函数求教,这是什么函数啊,有什么作用、STM32v3.5.0库函数stm32f10x_it.c中没有EXTI0中断函数、stm32 串口中断发送和接收怎么回事,就是串口的中断方式和查询方式有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/8834032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-22
下一篇 2023-04-22

发表评论

登录后才能评论

评论列表(0条)

保存