蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习

目录

串口中断

定时器中断

输出pwm 


串口中断

配置异步模式,使能中断,选择波特率。

蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第1张图片

蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第2张图片

串口接收中断开启  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

蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第3张图片

 定时器频率 = 80MHZ/分频系数/计数值

蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第4张图片蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第5张图片

定时时间 = (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");
    }
}

蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第6张图片

输出pwm 

假如用定时器17,lcd显示占空比,按下一次B1按键占空比加10。

蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第7张图片

打开pwm输出  HAL_TIM_PWM_Start (&htim17 ,TIM_CHANNEL_1 );

 while(1)里:蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第8张图片

蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第9张图片

蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习_第10张图片

 =========================================

你可能感兴趣的:(单片机,蓝桥杯嵌入式,stm32,蓝桥杯,学习)