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

目录

串口中断

定时器中断

输出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");
    }
}

输出pwm 

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

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

 while(1)里:

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值