99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

阿飛的秘術(shù)屋
認(rèn)證:VIP會員
作者動態(tài)
運(yùn)放電路中基準(zhǔn)電源溫漂對輸出的影響
2024-12-25 15:38
關(guān)于使用串口ISP方式進(jìn)行程序下載
2024-12-19 21:56
emc防護(hù)原理
2024-01-14 21:20
關(guān)于使用LVDS芯片進(jìn)行屏幕通信過程中遇到的EMC問題
2023-12-25 13:15
RT-Thread 串口DMA發(fā)送代碼解析
2023-12-21 16:58

STM32接收不定長數(shù)據(jù)

  • 硬件
    • STM32L475
  •  方案
    • 使用通過修改HAL庫,加入IDLE中斷,實(shí)現(xiàn)不定長數(shù)據(jù)接收
  • 參考資料
    • LAT0534_UART_IDLE中斷使用_接收不定長串口數(shù)據(jù)_V0.3
  • cubemx配置

  • 實(shí)現(xiàn)過程
    • 首先接入接受的數(shù)據(jù)緩沖區(qū),并設(shè)置緩沖區(qū)的大小
      //Store the revceived bytes number
      uint32_t Rev_Size = 0;
      //Receive buffer
      uint8_t UART_RX_Buf[15];?
    • 然后修改HAL庫的usart.c文件
      • 加入extern uint32_t Rev_Size;變量聲明
      • 修改HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart)該函數(shù)

        #else
        //修改后的代碼
        	CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE| USART_CR1_IDLEIE));
        //  CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE));//修改前的代碼
          CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
        #endif /* USART_CR1_FIFOEN */
      • 修改HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)該函數(shù),這里需要注意一下加入代碼的位置。
        __HAL_UNLOCK(huart);
        		
        		/* Enable the UART IDLE Interrupt*/   //加入的代碼
        		SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
        		
            /* Enable the UART Parity Error Interrupt */
            SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);
        ?
      • 修改void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)函數(shù),光放文檔里面的是 USART_SR_IDLE需要換成 USART_ISR_IDLE,NDTR換成CNDTR(具體原因看技術(shù)手冊和源碼)
        #if defined(USART_CR1_FIFOEN)
            if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
                && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
                    || ((cr3its & USART_CR3_RXFTIE) != 0U)))
        #else
        		//加入的代碼
        		if(((isrflags & USART_ISR_IDLE) != RESET) && ((cr1its & USART_CR1_IDLEIE) != RESET))
         {
        		//Record the received bytes number
        		Rev_Size = huart->RxXferSize - huart->hdmarx->Instance->CNDTR;
        		//clear the IDLE flag
        		__HAL_UART_CLEAR_IDLEFLAG(huart);
        		//Abord the received process
        		HAL_UART_AbortReceive_IT(huart);
        		return;
         }
        
            if (((isrflags & USART_ISR_RXNE) != 0U)
                && ((cr1its & USART_CR1_RXNEIE) != 0U))
        #endif /* USART_CR1_FIFOEN */
            {
              if (huart->RxISR != NULL)
              {
                huart->RxISR(huart);
              }
              return;
            }
          }?
    • 在main.c里面進(jìn)行函數(shù)修改 
      • 添加中斷,該中斷是在開啟接收后,當(dāng)接收到的數(shù)據(jù)沒有到達(dá)最大的接收位的時候,但是總線上停止了數(shù)據(jù)傳輸,總線進(jìn)入空閑狀態(tài),則產(chǎn)生中止中斷。,并進(jìn)入該函數(shù)進(jìn)行數(shù)據(jù)處理。
        void HAL_UART_AbortReceiveCpltCallback (UART_HandleTypeDef *huart)
        {
         //Print received Bytes
        	printf("\n\r[IDLE]Received %d Bytes:",Rev_Size);
        	for(uint16_t i = 0; i < Rev_Size; i++)
        	{
        	printf(" 0x%02X", UART_RX_Buf[i]);
        	}
        	//Re-start receiving
        	HAL_UART_Receive_DMA(&huart1, UART_RX_Buf, 15);
         /* NOTE : This function should not be modified, when the callback is needed,
         the HAL_UART_AbortTransmitCpltCallback can be implemented in the user 
        file.
         */
        }?
      • 該中斷的解釋
        /**
          * @brief  Abort ongoing Receive transfer (Interrupt mode).
          * @param  huart UART handle.
          * @note   This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode.
          * @note   This procedure is executed in Interrupt mode, meaning that abort procedure could be
          *         considered as completed only when user abort complete callback is executed (not when exiting function).
          * @retval HAL status
          */?
      • HAL_UART_Receive_DMA(&huart1, UART_RX_Buf, 15);接收中斷的啟動函數(shù),通過啟動接收,并在中止中斷里面再次開啟實(shí)現(xiàn)循環(huán)接收。其中15是最大的可接受的數(shù)據(jù)。
      • 具體使用,需要注意的是,printf函數(shù)需要自己加入printf支持。
        int main(void)
        {
          /* USER CODE BEGIN 1 */
        
          /* USER CODE END 1 */
        
          /* MCU Configuration--------------------------------------------------------*/
        
          /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
          HAL_Init();
        
          /* USER CODE BEGIN Init */
        
          /* USER CODE END Init */
        
          /* Configure the system clock */
          SystemClock_Config();
        
          /* USER CODE BEGIN SysInit */
        
          /* USER CODE END SysInit */
        
          /* Initialize all configured peripherals */
          MX_GPIO_Init();
          MX_DMA_Init();
          MX_USART1_UART_Init();
          /* USER CODE BEGIN 2 */
        	printf("123456789\r\n");
        	HAL_UART_Receive_DMA(&huart1, UART_RX_Buf, 15);
          /* USER CODE END 2 */
        
          /* Infinite loop */
          /* USER CODE BEGIN WHILE */
          while (1)
          {
            /* USER CODE END WHILE */
        
            /* USER CODE BEGIN 3 */
          }
          /* USER CODE END 3 */
        }
        ?
      • 結(jié)果

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
本篇所含全部資料,點(diǎn)擊此處留下郵箱我會發(fā)給你
資料明細(xì):使用IDLE中斷實(shí)現(xiàn)不定長數(shù)據(jù)接收。
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 4
收藏 3
關(guān)注 11
成為作者 賺取收益
全部留言
0/200
  • dy-xGqRDsfq 2024-10-29 21:51
    老師,能不能發(fā)我一下資料,謝謝! 11****@****.com
    回復(fù) 1條回復(fù)
  • zhouspace 2022-03-27 09:07
    老師,能不能發(fā)我一下資料,謝謝! 14****@****.com
    回復(fù) 3條回復(fù)
  • 阿飛的秘術(shù)屋 2021-08-27 18:39
    老師,能不能發(fā)我一下資料,謝謝! 56****@****.com
    回復(fù) 3條回復(fù)
主站蜘蛛池模板: www日本tv| 国语国产精精品国产国语清晰对话 | 69爱爱视频 | 国产午夜成人AV在线播放 | 亚洲中文成人中文字幕 | 狠狠噜天天噜日日噜视频麻豆 | 青青草91久久久久久久久 | 清纯女学生强制中出在线观看 | 一区二区三区精品视频免费看 | 1024久久| 日本亚洲a | 男男网站18禁免费 | 日韩精品手机在线 | av高清| 91九色论坛 | a级高清毛片 | 国产激情视频一区二区 | 色噜噜狠狠网站狠狠爱 | 秋霞久久久 | 国产精品免费一区二区三区观看 | 国产娱乐凹凸视觉盛宴在线视频 | 欧美性猛交久久久乱大交小说 | 九九九九网站 | www.国产日本 | 高清成人综合网 | 日韩新片在线观看 | 中文字幕在线观看不卡视频 | 北条麻妃中文字幕 | 欧美黑人粗暴多交高潮水最多 | 亚洲欧洲国产精品久久 | 国产国语在线播放视频 | 国产午夜成人无码免费 | 国产精品2020| 国产欧美小视频 | 成人黄网在线观看 | 亚洲大香线伊人婷婷五月 | 美国一级大黄一片免费中文 | 色悠久久久久久久综合网伊人 | 国产精品扒开腿做爽爽爽A片唱戏 | 一区二区最新免费视频 | 日韩精品无码一区二区中文字幕 |