本帖最后由 songshiqun2010 于 2019-6-13 12:01 编辑
1.空闲中断回调函数定义 如下- void HAL_UART_IdleCallback(UART_HandleTypeDef *huart)
- {
- if(huart->Instance == USART1){
- if(__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE) ){
- uint16_t rx_buffer_len,i;
- __HAL_UART_CLEAR_IDLEFLAG(huart);
- HAL_UART_DMAStop(huart);
- rx_buffer_len = huart->RxXferSize - __HAL_DMA_GET_COUNTER(huart->hdmarx);
- //TO DO:
- //将数据(huart->pRxBuffPtr 中 rx_buffer_len个字节)压入环形队列
- //这里未做环形队列实现,请自行填充
- HAL_UART_Receive_DMA(huart,huart->pRxBuffPtr,huart->RxXferSize);
- }
- }
- }
复制代码
2.回调函数调用方式如下
- /**
- * @brief This function handles USART1 global interrupt.
- */
- void USART1_IRQHandler(void)
- {
- /* USER CODE BEGIN USART1_IRQn 0 */
- extern void HAL_UART_IdleCallback(UART_HandleTypeDef *huart);
- HAL_UART_IdleCallback(&huart1);
- /* USER CODE END USART1_IRQn 0 */
- HAL_UART_IRQHandler(&huart1);
- /* USER CODE BEGIN USART1_IRQn 1 */
- /* USER CODE END USART1_IRQn 1 */
- }
复制代码 3.初始化如下
- uint8_t rx_buffer[256];
- HAL_UART_Receive_DMA(&huart1,rx_buffer,sizeof(rx_buffer));
- __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
复制代码 4.环形队列keil5 pack
ctb.ringbuffer.1.0.0.zip
(3.61 KB, 下载次数: 93)
|
大神,环形队列怎么自动生成?
帖子上不是有說明如何勾選 ? 如何生成 ?