...ST的HAL使用總結(1).串口中斷

部分程序:

uint8_t aRxBuffer[1];
uint8_t UART1RxBuff[10],UART1RxBuffCount=0;
unsigned char g_flag=0;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART3) 


UART1RxBuff[UART1RxBuffCount++] = aRxBuffer[0]; 
if(UART1RxBuffCount <10)
{
HAL_UART_Receive_IT(&huart3, aRxBuffer,1); 
}

else if(UART1RxBuffCount ==10)
{
UART1RxBuffCount=0;
g_flag=1;
}



}



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_USART3_UART_Init();


  /* Initialize interrupts */
  MX_NVIC_Init();
  /* USER CODE BEGIN 2 */
printf("ST_CUBE SERI PORT \n\r");
HAL_UART_Receive_IT(&huart3, aRxBuffer,1);  
  /* USER CODE END 2 */


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {


  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */
if(g_flag == 1)
{
g_flag =0;

HAL_UART_Transmit_IT(&huart3,(uint8_t*)UART1RxBuff,sizeof(UART1RxBuff));
HAL_UART_Receive_IT(&huart3, aRxBuffer,1);
}
  }
  /* USER CODE END 3 */


}


注意 (1)HAL_UART_Receive_IT()中如果緩存設置大於1,出現不進入接收中斷現象,沒弄清楚,所以改爲1,由自己寫相關緩存程序;

(2) 接收回調函數儘量內容少

(3) 測試穩定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章