【STM32知识点】关于串口接收中断(回调函数)

串口使用流程:

1、初始化串口

2、使能中断(在非阻塞模式下接收一定量的数据。)

HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

huart: 指向包含 UART_HandleTypeDef 结构的指针

pData: 指向数据缓冲区的指针

Size: 要接收的数据量

注意:如果设置要接受的数据量为1个字节数,那么当接受1个字节以后就会进入回调函数。

接受回调函数如下:

HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

注意:如果需要多次进入回调函数,那么回调函数中,需要重新使能接受中断。否则只能进入一次。

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
串口通信中常用的回调函数有接收中断回调函数和发送完成回调函数。下面是STM32F103C8T6串口1接收中断回调函数和发送完成回调函数的示例代码: ``` void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { // 接收中断回调函数 // 从USART1接收一个字节的数据,并进行相应的处理 uint8_t data = USART_ReceiveData(USART1); // TODO: 进行数据处理 } } void USART1_TxCpltCallback(void) { // 发送完成回调函数 // TODO: 进行发送完成后的操作 } ``` 以上代码中,USART1_IRQHandler是USART1的中断处理函数,通过USART_GetITStatus函数判断是否为接收中断,并通过USART_ReceiveData函数接收一个字节的数据进行相应的处理。USART1_TxCpltCallback是USART1的发送完成回调函数,当USART1发送完成后,会自动调用此函数进行发送完成后的操作。需要注意的是,这两个回调函数需要在USART1初始化函数中进行注册,具体方法如下: ``` USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 使能USART1接收中断 USART_ITConfig(USART1, USART_IT_TC, ENABLE); // 使能USART1发送完成中断 USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); // 使能USART1空闲中断 USART_ITConfig(USART1, USART_IT_ERR, ENABLE); // 使能USART1错误中断 // 注册USART1的中断处理函数和发送完成回调函数 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART1, USART_IT_TXE, ENABLE); // 使能USART1发送寄存器空中断 USART_ClearFlag(USART1, USART_FLAG_TC); // 清除USART1发送完成标志位 // 注册USART1的发送完成回调函数 USART_ITConfig(USART1, USART_IT_TC, ENABLE); USART1->ICR |= USART_ICR_TCCF; // 清除USART1发送完成标志位 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 使能USART1接收中断 ``` 以上代码中,通过USART_ITConfig函数和NVIC_Init函数使能USART1的中断和设置中断优先级。然后,通过USART_ClearFlag函数清除USART1的发送完成标志位,并通过USART_ITConfig函数和USART1->ICR |= USART_ICR_TCCF来注册USART1的发送完成回调函数。最后,通过USART_ITConfig函数使能USART1的接收中断

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值