历史上的今天
返回首页

历史上的今天

今天是:2025年06月17日(星期二)

正在发生

2020年06月17日 | STM32CubeMX系列教程3:基本定时器

2020-06-17 来源:eefocus

这一章我们在前一章GPIO的工程修改。复制GPIO的工程,修改文件夹名。点击打开STM32cubeMX的工程文件重新配置。开启定时器TIM3,选择内部时钟。

定时器就相当于单片机的闹钟,下面我们以基本定时器为例简单介绍一下定时器。

从上图我们可以看到,基本定时器主要由下面三个寄存器组成。

  • 计数器寄存器 (TIMx_CNT)

  • 预分频器寄存器 (TIMx_PSC)

  • 自动重载寄存器 (TIMx_ARR)

计数器寄存器 (TIMx_CNT)存储的是当前的计数值。预分频器 (TIMx_PSC)为多少个SK_PSC脉冲计数一次,如图192 预分频器的值为1(预分频寄存器默认为0,为不分频),则为两个脉冲计数一次。即为二分频。如果要10000分频,则预分频器的值为1000-1。


自动重装寄存器 (TIMx_ARR)存储的是计数器的溢出值,例如图194中计数器递增计数到36计数器溢出,触发一次事件。而实际上为37个脉冲触发一次溢出事件(从0开始计数)。

要确定定时的时间我们必须先确定CK_PSC的频率,TIM3配置中选择内部时钟作为时钟源,查看数据手册或者查看代码可以知道TIM3是挂接到APB1时钟线上。

内部时钟设置为不分频(CKD),则CK_PSC的时钟频率等于APB1的时钟频率108MHz,即108000 000Hz。若要定时时间为1s,则即可设置10800分频(预分频器寄存器 (TIMx_PSC)的值为10800-1),定时器的时钟CK_CNT的频率为10000Hz.则自动重载寄存器 (TIMx_ARR)设置为10000-1即定时为1s.TRGO为触发输出,可以触发内部ADC/DAC,这里我们没有用到这个功能,参数为默认设置。

定时器有如下三种计数模式

递增计数模式:计数器从 0 计数到自动重载值,然后重新从 0 开始计数并生成计数器上溢事件。

递减计数模式:计数器从自动重载值开始递减到 0,然后重新从自动重载值开始计数并生成计数器下溢事件。

中心对齐模式:计数器从 0 开始计数到自动重载值 – 1 ,生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数。


在NVIC Settings框勾选开启定时器中断。优先级为默认。或者在NVIC配置中使能TIM3中断。


生成报告,以及生成代码,编译程序。

打开main.c文件。把main()函数里while循环上一章的代码删掉,while循环里面为空。在main.c文件后面USER CODE BEGIN 4 和 USER CODE END 4 中间添加中断回调函数。定时器中断处理函数中翻转一次LED1~LED4的电平。

/* USER CODE BEGIN 4 */
/**
  * @brief  Period elapsed callback in non blocking mode
  * @param  htim: TIM handle
  * @retval None
  */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == htim3.Instance)
    {
        /* Toggle LED */
        BSP_LED_Toggle(LED1);
        BSP_LED_Toggle(LED2);
        BSP_LED_Toggle(LED3);
        BSP_LED_Toggle(LED4);
    }
}
/* USER CODE END 4 */


在main.c文件中while(1)循环前面添加如果代码启动基本定时器中断模式计数。


/* USER CODE BEGIN 2 */
     
  /*##-1- Start the TIM Base generation in interrupt mode ####################*/
  HAL_TIM_Base_Start_IT(&htim3);
     
/* USER CODE END 2 */


重新编译程序,编译通过后下载到Open746-C开发板。按复位可以看到LED1~LED4间隔1s闪烁一次。

现在我们再次分析一下程序。工程中配置TIM3定时器选择内部时钟不分频作为时钟源,挂载到APB1时钟总线上(108MHz),设置为递增计数模式,预分频器设置为10800-1,即10800分频,最后定时器的频率为10000HZ。一个脉冲的时间为1/10000s。则若要定时1s,则自动重载寄存器设置为10000-1(如要定时0.2s,则自动重装寄存器设置为0.2/(1/10000)-1.即2000-1)。


在main()函数中调用HAL_TIM_Base_Start_IT(&htim3)开启定时器,定时器从0开始计数,当计数到10000-1,即9999时,产出上溢出事件,计数器又从0开始继续计数。由于我们开启了定时器中断,所以发生上溢出事件时会触发定时器中断。程序会转跳到中断服务函数中运行。我们在中断服务函数中翻转LED的电平。下次定时器再次溢出触发中断继续翻转LED的电平。所以我们会看到LED不断闪烁。


推荐阅读

史海拾趣

CHINFA公司的发展小趣事

随着全球化进程的加速,CHINFA公司意识到必须走国际化发展道路。公司制定了详细的国际化战略,积极开拓海外市场。通过与国外知名企业的合作和交流,公司不断提升自身的技术水平和市场竞争力。同时,公司还积极参加国际电子展会和论坛,展示自身实力和产品优势,进一步提升了品牌知名度和影响力。

Amecon Magnetics公司的发展小趣事

在竞争激烈的电子行业中,品质是企业生存和发展的关键。Amecon Magnetics公司始终将品质管理放在首位,建立了严格的质量管理体系,确保从原材料采购到产品出厂的每一个环节都符合高标准的质量要求。这种对品质的执着追求使得公司的产品赢得了客户的广泛好评和信赖,为公司树立了良好的品牌形象。

Guerrilla RF公司的发展小趣事
如果以上步骤无法解决问题,建议将硬盘送至专业的数据恢复中心或维修店进行维修。
DCX-CHOL Enterprises公司的发展小趣事

在追求经济效益的同时,DCX-CHOL Enterprises也积极履行社会责任,倡导绿色环保。公司采用环保材料和生产工艺,减少生产过程中的污染物排放。同时,公司还积极推广节能减排的理念,鼓励员工和合作伙伴共同参与环保行动。这些举措不仅提升了公司的社会形象,也为公司的可持续发展提供了有力保障。

Fukushima Futaba Electric Co Ltd公司的发展小趣事

随着技术的不断成熟和产品质量的提升,Futaba Electric开始将目光投向国际市场。20世纪70年代末至80年代初,公司成功进入欧美市场,与多家国际知名企业建立了合作关系。通过参加国际展会、设立海外分支机构等方式,Futaba Electric的产品逐渐在全球范围内得到推广和应用。这一时期,公司的国际化战略取得了显著成效,为公司的长远发展奠定了更加坚实的基础。

AXTAL公司的发展小趣事

AXTAL公司诞生于2003年,是由物理学家兼电子工程师Bernd Neubig创立的。Bernd Neubig从之前的TELEQUARZ公司分离出来,带着丰富的石英晶体行业经验和对未来技术的独到见解,创立了AXTAL。公司的员工团队拥有超过80年的石英晶体行业累积经验和专业知识,为公司的起步奠定了坚实的基础。

问答坊 | AI 解惑

ADSP-218X的IDMA接口自举设计

摘要:介绍ADSP-218X系列DSP芯片的IDMA接口的自举设计与应用。硬件方面介绍ADSP-218X的IDMA接口特点以及它与主机的连接方式;软件方面介绍如何DSP的程序与主机程序代码结合起来,并由主机通过IDMA接口与ADSP-218X下载程序。此种方法可简化系统设计 ...…

查看全部问答>

求帮写一个CPLD分频的程序(Verilog)

具体要求是: 由8MHz的晶振分频至0.8Hz, 占空比为80%,低电平时间为0.25s,高电平时间为1s …

查看全部问答>

单片机高手帮帮我

我想学习单片机,但不知道该怎么入手,例如说,我应该有什么基础,该看些什么书之类的,大家帮我解决一下吧!…

查看全部问答>

学ARM 先学写驱动 还是先学写应用?

小弟学ARM    请问前辈们先学写驱动   还是先学写应用?…

查看全部问答>

BEAGLEBONE开发板功能:学习心得

    BeagleBone开发板通过两个46针接口引出了功能引脚,各针脚都复用功能,通过定义mode0 -mode7选择引脚功能。     在LINUX操作系统下,所有对GPIO、SPI、UART、LCD的操作都不象原来单片机编程那样直接进行,而必 ...…

查看全部问答>

MSP430G2X电路图

MSP-EXP430G2_Schematic+Silkscreen [ 本帖最后由 wstt 于 2012-7-12 14:56 编辑 ]…

查看全部问答>

单片机C语言程序设计实训100例 第 02 篇 硬件应用(含源码)

单片机C语言程序设计实训100例 第 02 篇 硬件应用(含源码) 下载地址 https://download.eeworld.com.cn/detail/lbk747/1459 希望对大家有用…

查看全部问答>

结果如何啊??!Hercules DIY创意大搜集!比比看,谁的设计最“安全”?

Hercules DIY创意大搜集!比比看,谁的设计最“安全”? 活动应该结束了吧,结果如何啊?有谁知道的吗?!…

查看全部问答>

心电信号的计算机分析

E:\\心电信号的计算机分析…

查看全部问答>