蓝桥杯嵌入式基础模块——定时器的基本作用(新板)STM32G431(HAL库开发)

 STM32定时器资源介绍        

         STM32 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。 STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。

通用定时器的功能

STM32 的通用 TIMx (TIM2、 TIM3、 TIM4 和 TIM5)定时器功能包括:

1)16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。
2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~
65535 之间的任意数值。
3) 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
        A.输入捕获
        B.输出比较
        C. PWM 生成(边缘或中间对齐模式)
        D.单脉冲模式输出
4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外
一个定时器)的同步电路。
5)如下事件发生时产生中断/DMA:
        A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
        B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
        C.输入捕获
        D.输出比较
        E.支持针对定位的增量(正交)编码器和霍尔传感器电路
        F.触发输入作为外部时钟或者按周期的电流管理

 实验内容

        初始化定时器定时100ms,使LED1闪烁,并且B1按键,可以改变定时器定时时间。按一次增加1000ms。

演示效果

696f2f499536494085cbf7873fd36c0b.gif

 

硬件连接

LED

0b8aa66b6d864055aa50172e3bf39433.png

 按键

505e6ac7b409451a8368df7463977dc5.png

STM32CubeMX配置

c30d028fe32e4950ad7259cc8283c342.png

 

 4da005d7debb4a8881528ea1425f93d3.png

主程序

main.c

int main(void)
{
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);//关闭锁存器
	
	LCD_Init();
	LCD_SetTextColor(White);
	LCD_SetBackColor(Black);
	LCD_Clear(Black);
	
	HAL_TIM_Base_Start_IT(&htim2);//使能定时器
	

  while (1)
  {
		vKeyScan();
  }
}

tim.c



uint16_t flag=0;
uint16_t B1=100;

//定时器中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance=htim2.Instance)
	{
		flag++;
		if(flag==B1)
		{
			flag=0;
			HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
			 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);//翻转电平
			HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关锁存器
		}
	}
}

 

 

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32G431HAL库中,可以使用外部中断来处理外部信号的触发。下面是使用HAL库进行外部中断的步骤: 1. 配置IO口为外部中断输入源:在GPIO初始化函数中,使用`GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING/FALLING/RISING_FALLING`来设置IO口的触发方式,可以选择上升沿触发、下降沿触发或者上升下降沿都触发。 2. 在NVIC中使能外部中断,并分配优先级:使用`HAL_NVIC_SetPriority(EXTI_IRQn, PreemptPriority, SubPriority)`函数设置外部中断的优先级,其中`EXTI_IRQn`是外部中断的中断号,`PreemptPriority`是抢占优先级,`SubPriority`是子优先级。 3. 实际的中断执行函数:在中断执行函数中,可以编写具体的中断处理代码。在HAL库中,中断执行函数的命名规则为`void EXTIx_IRQHandler(void)`,其中`x`是对应的外部中断线号。 4. 使能中断时:使用`HAL_NVIC_EnableIRQ(EXTI_IRQn)`函数使能外部中断。 下面是一个使用HAL库进行外部中断的示例代码: ```c // 配置IO口为外部中断输入源 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_0; // 设置为对应的IO口 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // 上升沿触发 GPIO_InitStruct.Pull = GPIO_PULLDOWN; // 默认拉低 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 在NVIC中使能外部中断,并分配优先级 HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // 实际的中断执行函数 void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); } // 使能中断 HAL_NVIC_EnableIRQ(EXTI0_IRQn); ``` 请注意,以上代码仅为示例,具体的配置和使用方法可能会根据实际情况有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫咪死了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值