HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuff, 1); //打开串口中断接收
HAL_TIM_Base_Start_IT(&htim3);//开启定时器
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == htim3.Instance)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
/* Toggle LED */
if(Rx_flag==1)
{
printf_usart();
Rx_flag=0;
}
}
}
// 捕获中断回调函数,每次捕获到信号就会进入这个回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef*UartHandle)
{
RxLine++; //每接收到一个数据,进入回调数据长度加1
DataBuff[RxLine-1]=RxBuff[0]; //把每次接收到的数据保存到缓存数组
Rx_flag=1;
if(RxBuff[0]==0xff) //接收结束标志位,这个数据可以自定义,根据实际需求,这里只做示例使用,不一定是0xff
{
printf_usart();
}
RxBuff[0]=0;
HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuff, 1); //每接收一个数据,就打开一次串口中断接收,否则只会接收一个数据就停止接收
__HAL_TIM_SET_COUNTER(&htim3, 1); // 计数清零,从头开始计
}
STM32 串口中断+定时器中断
最新推荐文章于 2024-07-14 22:49:03 发布