目录
串口中断
定时器中断
输出pwm
配置异步模式,使能中断,选择波特率。
串口接收中断开启 HAL_UART_Receive_IT(&huart1,data, 3);
回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart ->Instance == USART1)
{
printf ("接收到的数据是:%s \r\n",data);
LED_Control (0x03);
sprintf((char*)data ,"data: %c",data[0] );
LCD_DisplayStringLine(Line6,data);
HAL_UART_Receive_IT(&huart1, data ,3);//重新使能接收中断,不然只进一次
}
}
串口重定向:#include "stdio.h"
int fgetc(FILE *f)
{
uint8_t ch;
HAL_UART_Receive (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
return ch;
}
int fputc (int ch,FILE *f)
{
HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
return ch;
}
高级定时器:TIM1 TIM8
通用定时器: TIM2 TIM3 TIM4 TIM15 TIM16 TIM17
基本定时器:TIM6 TIM7
定时器频率 = 80MHZ/分频系数/计数值
定时时间 = (5000 * 8000)/ 80 000000 = 0.5 秒 7999 4999
1s : 10000 * 8000 / 80 000000 = 1 9999 7999
100Hz : 719 999
打开定时器中断: HAL_TIM_Base_Start_IT(&htim3 );
定时器中断回调函数:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim -> Instance == TIM3)
{
printf ("定时器中断\r\n");
}
}
假如用定时器17,lcd显示占空比,按下一次B1按键占空比加10。
打开pwm输出 HAL_TIM_PWM_Start (&htim17 ,TIM_CHANNEL_1 );
=========================================