你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一种基于HAL+UART+DMA环形队列接收数据实现方法

[复制链接]
byronsong 发布时间:2019-6-13 10:11
本帖最后由 songshiqun2010 于 2019-6-13 12:01 编辑

复制代码
1.空闲中断回调函数定义 如下
  1. void HAL_UART_IdleCallback(UART_HandleTypeDef *huart)
  2. {
  3.   if(huart->Instance == USART1){
  4.     if(__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE) ){
  5.       uint16_t rx_buffer_len,i;
  6.       __HAL_UART_CLEAR_IDLEFLAG(huart);
  7.       HAL_UART_DMAStop(huart);
  8.       rx_buffer_len = huart->RxXferSize - __HAL_DMA_GET_COUNTER(huart->hdmarx);
  9.       //TO DO:
  10.       //将数据(huart->pRxBuffPtr 中 rx_buffer_len个字节)压入环形队列
  11.       //这里未做环形队列实现,请自行填充
  12.       HAL_UART_Receive_DMA(huart,huart->pRxBuffPtr,huart->RxXferSize);
  13.     }
  14.   }
  15. }
复制代码

2.回调函数调用方式如下
  1. /**
  2.   * @brief This function handles USART1 global interrupt.
  3.   */
  4. void USART1_IRQHandler(void)
  5. {
  6.   /* USER CODE BEGIN USART1_IRQn 0 */
  7.   extern void HAL_UART_IdleCallback(UART_HandleTypeDef *huart);
  8.   HAL_UART_IdleCallback(&huart1);
  9.   /* USER CODE END USART1_IRQn 0 */
  10.   HAL_UART_IRQHandler(&huart1);
  11.   /* USER CODE BEGIN USART1_IRQn 1 */

  12.   /* USER CODE END USART1_IRQn 1 */
  13. }
复制代码
3.初始化如下

  1. uint8_t rx_buffer[256];

  2.   HAL_UART_Receive_DMA(&huart1,rx_buffer,sizeof(rx_buffer));
  3.   __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
复制代码
4.环形队列keil5 pack ctb.ringbuffer.1.0.0.zip (3.61 KB, 下载次数: 93)
收藏 3 评论6 发布时间:2019-6-13 10:11

举报

6个回答
creep 回答时间:2019-6-13 13:56:06
感谢分享      
jeffhe1 回答时间:2019-6-13 17:13:29
Ringbufer 也可以直接生成 , 真是越來越方便了
唐英tcy 回答时间:2019-6-17 08:05:45
谢谢分享
rayan19890804 回答时间:2020-9-23 08:31:18
这个好
Ankky 回答时间:2020-9-24 08:53:05
jeffhe1 发表于 2019-6-13 17:13
Ringbufer 也可以直接生成 , 真是越來越方便了

大神,环形队列怎么自动生成?
jeffhe1 回答时间:2020-9-24 09:05:50
caoenq 发表于 2020-9-24 08:53
大神,环形队列怎么自动生成?

帖子上不是有說明如何勾選 ? 如何生成 ?

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版