知识点:串口(单片机接受)+定时器中断(控制LED闪烁)、
配置
串口


定时器


代码
定义变量
uint8_t rx_data;
uint8_t led_flag;
uint16_t cnt=0;
使能
HAL_UART_Receive_IT(&huart1,&rx_data,1);
HAL_TIM_Base_Start_IT(&htim2);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
定时器中断
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM2)
{ if(led_flag==1)
{
cnt++;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_10);
if(cnt>50)
{
led_flag=0;
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
}
}
}
}
串口接受函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(rx_data=='X')
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);
}
if(rx_data=='Y')
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_9);
}
if(rx_data!='X'&&rx_data!='Y')
{
led_flag=1;
TIM2->CNT=0;
}
HAL_UART_Receive_IT(&huart1,&rx_data,1);
}