【蓝桥杯嵌入式】四、各种外设驱动(七)定时器的输出比较功能

温馨提示:本文不会重复之前提到的内容,如需查看,请参考附录

【蓝桥杯嵌入式】附录

重点提炼:

根据手册内容,输出比较模式(output Compare CHx)的功能主要需要由以下参数决定:

  • 通过设置 Counter Period   来设置周期
  • 通过设置 Mode                    来设置输出比较模式
  • 通过设置 Puls                      来设置脉冲宽度(不可大于周期宽度)
  • 通过设置 CH Polarity          来设置通道极性(使用有效电平或无效电平模式时配置,本示例是翻转模式,与该参数无关)

理论知识:


        输出比较(output compare)用于控制输出波形,或指示经过了某一段时间。它的工作原理是:用捕获/比较寄存器的值CCR与计数器值CNT比较,如果两个寄存器的值匹配,产生输出比较结果OCyREF,这个值由比较模式和输出极性决定,这个比较结果可以输出到通道的引脚。比较匹配时,可以产生中断或DMA请求,可以引起输出引脚发生如下几种变化。

  • 冻结(Frozen),即保持其电平。
  • 有效电平(Active level),有效电平由设置的通道极性决定。
  • 无效电平(Inactive Level)。
  • 翻转(Toggle)。

现设计一个示例,来演示这一功能的使用流程。

使用TIM16_CH1的输出比较功能控制LED灯反转输出。为了充分利用开发板上的资源,这里将TIM16_CH1的输出当作一个开关信号,开控制板子上的LED。

一、需求分析

1、需要的外设资源分析:

  • 选择TIM16的CH1通道来进行输出比较,TIM16只有一个通道对应PA6引脚。
  • 板子上的8个LED,只需要开全部灯和关全部灯的功能,选择一种驱动方法即可。

 2、外设具体分析:

查看原理图,和手册。

根据手册内容,输出比较模式(output Compare CHx)的功能主要需要由以下参数决定:

  • 通过设置 Counter Period   来设置周期
  • 通过设置 Mode                    来设置输出比较模式
  • 通过设置 Puls                      来设置脉冲宽度(不可大于周期宽度)
  • 通过设置 CH Polarity          来设置通道极性(使用有效电平或无效电平模式时配置,本示例是翻转模式,与该参数无关)

3、软件分析:

        启动TIM_CH1的输出比较功能,以轮询方式检查TIM_CH1引脚的输出状态,如果为高电平那么就使8个LED灯熄灭,如果为低电平就点亮8个LED灯。

二、软件配置

参考附录的内容,新建名为“OutComp_Demo”的项目。

时钟配置:将APB1 timer clocks设置为50MHz

按照分析配置TIM16:

先启用TIM16的通道1,设置为输出比较模式:

然后配置 Parameter Settings :

  • 设置 Prescaler              为49999
  • 设置 Counter Period    为499
  • 设置 Pulse                    为300

结果如图:

然后打开TIM16全局中断,设置优先级为1。

根据附录内容,配置LED引脚和驱动文件。

生成项目文件后,打开MDK。

三、代码编写

分析:

在主循环前以中断方式启动TIM16,启动CH1的输出比较功能。

在主循环中轮询检测CH1的输出状态,如果为高电平那么就使8个LED灯熄灭,如果为低电平就点亮8个LED灯。

在MDK中编写代码

在 main(void) 的 WHILE代码段,编写以下代码。

  /* USER CODE BEGIN WHILE */
	HAL_TIM_Base_Start_IT(&htim16);
	HAL_TIM_OC_Start(&htim16,TIM_CHANNEL_1);
  while (1)
  {
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==GPIO_PIN_SET)
			LED_change(LED_NULL);
		else
			LED_change(LED_ALL);
    /* USER CODE END WHILE */

四、运行测试

编译、下载。

运行结果可以看到8个LED灯每秒闪烁一次。

相关推荐

  1. 嵌入之模块驱动

    2024-03-17 18:32:09       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 18:32:09       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 18:32:09       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 18:32:09       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 18:32:09       18 阅读

热门阅读

  1. 简单理解promise。。。

    2024-03-17 18:32:09       21 阅读
  2. python爬取B站CC字幕(隐藏式字幕)

    2024-03-17 18:32:09       18 阅读
  3. 微服务的无状态、版本控制向后兼容、流量整型

    2024-03-17 18:32:09       16 阅读
  4. IBatis与MyBatis区别

    2024-03-17 18:32:09       18 阅读
  5. MongoDB聚合运算符:$expMovingAvg

    2024-03-17 18:32:09       14 阅读