我使用STM32CubeMX生成了UART1的中断代码。
在文件stm32f0xx_it.c中生成了中断代码。为了验证是否发生中断,我使用了uart_irq变量来指示中断。在主循环中进行检验
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] This function handles USART1 global interrupt.
*/
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uart_irq = 1;
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
if(uart_irq == 0x01)
{
for(i=0;i<20;i++)
{
printf("%c: \n",aRxBuffer[i],i);
}
printf("Line a End\n");
uart_irq = 0x00;
}
在程序的主循环外使用HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1);函数接收了一次。
程序开始没有看到有输出,当程序第一次接收到发送数据时,发现第一次可以接收到一个“字符”。但是后来就无法接收到任何字符了。
所以现在有两个疑问:
1、中断函数void USART1_IRQHandler(void)中的 HAL_UART_IRQHandler(&huart1);函数有什么用处。
2、为什么中断只发生了一次就不在发生了。
|