精品国产一区在线_av无码中文字幕无码王_天海翼三点刺激高潮不停_好硬好大好爽视频_欧美高清一区三区在线专区_香蕉黄色片

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

  • 硬件
    • STM32L475
  •  方案
    • 使用通過修改HAL庫,加入IDLE中斷,實(shí)現(xiàn)不定長(zhǎng)數(shù)據(jù)接收
  • 參考資料
    • LAT0534_UART_IDLE中斷使用_接收不定長(zhǎng)串口數(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ù)手冊(cè)和源碼)
        #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í)候,但是總線上停止了數(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);接收中斷的啟動(dòng)函數(shù),通過啟動(dòng)接收,并在中止中斷里面再次開啟實(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),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
本篇所含全部資料,點(diǎn)擊此處留下郵箱我會(huì)發(fā)給你
資料明細(xì):使用IDLE中斷實(shí)現(xiàn)不定長(zhǎng)數(shù)據(jù)接收。
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 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免费视频在线观看播放 | h片在线观看一区二区三区 免费看黄网站大全 | 日韩一区二区三区在线观看 | 午夜伊人网 | 国产美女亚洲精品7777 | 欧美成人精品一区二区三区色欲 | 国产成人无码区免费内射一片色欲 | 老司机免费在线观看 | 国产精品一区一区 | 99爱精品在线 | 国产激爽大片高清在线观看 | 国内毛片毛片毛片毛片毛片毛片 | 欧美激情一区二区三区蜜桃视频 | 午夜精品a片一区二区三区 奇米影视二区 | 日本蜜桃在线观看视频 | 国产精品久久久久久久久久无遮挡 | 优酷在线观看 | 蜜芽亚洲AV尤物183不卡资源 | 久久久亚洲精华液精华液精华液 | 亚洲Aⅴ无码专区在线观看春色 | 成人午夜免费观看 | 绯色一区二区三区 | 久久九九久久精品 | 天堂电影av | 日本精品免费一区二区三区 | 亚洲精品美女视频在线观看 | 欧美伦理一区二区 | 国产成人欧美视频在线观看 | 女人被两根一起进3p的动漫 | 大地资源免费视频观看大全 | 四虎一区二区在线观看 | 亚洲日韩欧美乱伦中文字 | 美女黄网站色视频免费国产 | 青苹果乐园在线观看免费动漫 | 777久久精品一区二区三区无码 | 偷看农村女人做爰毛片色 | 精品人伦一区二区三区蜜桃免费 | 97人人做人人爱 | 国产三级全黄A级视频 | 国产高潮白浆黑丝 |