历史上的今天
返回首页

历史上的今天

今天是:2024年09月28日(星期六)

2021年09月28日 | STM8S(105K4)使用笔记——TIM4的基础配置

2021-09-28 来源:eefocus

0、通过TIM4实现类似STM32的uwTick功能

通过TIM4计时产生中断,每毫秒执行一次uwTick++。


1、设置TIM4分频与自动重装载值

设置TIM4分频

  /* 1分频 */

  TIM4->PSCR = (uint8_t)0x00;

  /* 2分频 */

  TIM4->PSCR = (uint8_t)0x01;

  /* 4分频 */

  TIM4->PSCR = (uint8_t)0x02;

  /* 8分频 */

  TIM4->PSCR = (uint8_t)0x03;

  /* 16分频 */

  TIM4->PSCR = (uint8_t)0x04;

  /* 32分频 */

  TIM4->PSCR = (uint8_t)0x05;

  /* 64分频 */

  TIM4->PSCR = (uint8_t)0x06;

  /* 128分频 */

  TIM4->PSCR = (uint8_t)0x07;


设置TIM4自动重装载值

  /* TIM4_Period为需要设置的自动重装载值 */

  TIM4->ARR = (uint8_t)(TIM4_Period);


TIM4计时触发公式

TIM4_Period= (time * TIM4_Counter_Clock - 1);

TIM4_Period 为设置的自动重装载值

time 为TIM4触发所需时间(s)

TIM4_Counter_Clock 为TIM4频率,等于主频率Fmaster/TIM4分频值(hz)

2、配置TIM4更新中断使能

  /* 配置更新中断使能 */

  TIM4->IER |= (uint8_t)0x01;

  /* 配置更新中断禁止 */

  TIM4->IER &= (uint8_t)(~0x00);


推荐在使能更新中断前清除可能产生的更新中断标志


  TIM4->SR1 = (uint8_t)(~0x01);


3、使能TIM4

  /* 使能TIM4 */

  TIM4->CR1 |= (uint8_t)(0x01);

  /* 禁用TIM4 */

  TIM4->CR1 &= (uint8_t)(~0x01);

  /* 使能中断 */

  enableInterrupts();


4、设计全局uwTick

  #define SYS_MAX_DELAY 0xFFFFFFFFU

  __IO uint32_t uwTick;

  /**

   * @brief  auto plus by Time4 , 1 per ms

   * ----------------

   */

  void SYS_IncTick(void)

  {

      uwTick++;

  }


  /**

   * @brief  get uwtick

   * ----------------

   */

  uint32_t SYS_GetTick(void)

  {

      return uwTick;

  }


  /**

   * @brief  delay

   * ----------------

   */

  void SYS_Delay(__IO uint32_t Delay)

  {

      uint32_t tickstart = SYS_GetTick();

      uint32_t wait = Delay;


      /* Add a period to guarantee minimum wait */

      if (wait < SYS_MAX_DELAY)

      {

          wait++;

      }


      while ((SYS_GetTick() - tickstart) < wait)

      {

      }

  }


5、配置软件中断函数

  /* 软件中断函数 */

  INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)

  {

    SYS_IncTick();

    /* 清除更新中断标志 */

    TIM4->SR1 = (uint8_t)(~0x01);

  }


6、TIM4寄存器简介:

CR控制寄存器

在这里插入图片描述

IER中断使能寄存器

在这里插入图片描述

SR状态寄存器

在这里插入图片描述

EGR事件产生寄存器

在这里插入图片描述

CNTR计数器

在这里插入图片描述

PSCR预分频寄存器

在这里插入图片描述

ARR自动重装载寄存器

在这里插入图片描述

推荐阅读

史海拾趣

ECLIPSE公司的发展小趣事

2001年,IBM公司决定推动一个开源项目,旨在打造一个全新的集成开发环境。这个项目名为Eclipse,旨在通过开放源代码的方式,吸引全球开发者共同参与。Eclipse的初始版本发布后,凭借其优秀的性能和友好的界面,迅速在开发者社区中引起了关注。

Galil Motion Control Inc公司的发展小趣事

Eclipse的成功离不开其强大的社区支持。Eclipse社区拥有众多的开发者、测试者和用户,他们共同为Eclipse的发展贡献力量。通过举办开发者大会、在线论坛和邮件列表等方式,Eclipse社区为开发者们提供了一个交流学习的平台。在这个平台上,开发者们可以分享经验、解决问题,共同推动Eclipse的发展。

GeneSiC公司的发展小趣事

尽管Eclipse是一个开源项目,但其背后也有着商业化的运作。一些公司看到了Eclipse的潜力,纷纷推出了基于Eclipse的商业产品。这些产品不仅继承了Eclipse的优秀特性,还加入了一些独特的功能和服务,以满足不同客户的需求。通过商业化运作,Eclipse的影响力得到了进一步扩大。

CML Microcircuits公司的发展小趣事

面对未来电子行业的挑战和机遇,CML Microcircuits公司制定了可持续发展的未来规划。公司将继续加大在研发和创新方面的投入,推动技术的不断进步。同时,CML还将关注环保和可持续发展的问题,积极采用环保材料和节能技术,降低生产过程中的能耗和排放。此外,公司还将加强与全球合作伙伴的合作,共同推动电子行业的可持续发展。

这些故事虽然基于虚构,但它们展示了CML Microcircuits公司可能经历的发展路径和关键事件。在实际情况下,公司的发展可能受到多种因素的影响,包括市场环境、技术趋势、竞争态势等。因此,对于CML Microcircuits公司的真实历史和发展情况,还需要进一步了解和分析相关资料。

General Diode Corp公司的发展小趣事
负责向焊接区域提供CO2保护气体,防止空气中的氧气、氮气等对焊缝造成氧化、气孔等缺陷。
Festo公司的发展小趣事

1993年,Festo公司正式进入中国市场,成立了费斯托(中国)有限公司。进入中国后,Festo迅速抓住了中国改革开放的机遇,通过直销的销售理念和优质的服务赢得了客户的信任和支持。经过多年的努力,Festo在中国市场取得了长足的发展,成为了德国总部以外最大的子公司。同时,Festo还不断加大在中国的投资力度,建立了多个研发中心和生产基地,为中国客户提供更加优质的产品和服务。

问答坊 | AI 解惑

学习C 和编程的50个观点

下面的是学C++时要注意的。绝对经典!! 1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他 ...…

查看全部问答>

反转式串联开关电源储能滤波电容的计算 开关电源原理与设计(连载七)

1-3-3.反转式串联开关电源储能滤波电容的计算 反转式串联开关电源储能滤波电容参数的计算,与串联式开关电源储能滤波电容的计算方法基本相同。但要注意,即使是在占空比D等于0.5的情况下,滤波电容器充、放电的时间都不相等,滤波电容器充电的时 ...…

查看全部问答>

Stellaris资料整理贴

//--------------------------------------2010.3.25---------------------------------------- 1. Stellaris大全(不断更新) 2. Stellaris系列原理图汇总 3. Stellaris系列实验例程——IAR5.11实验例程 4. Stellaris系列实验例程——Keil实验 ...…

查看全部问答>

各位开发过GPRS发送彩信的项目的大侠来看了

我现在在做一个用simenz MC55模块实现通过GPRS发送彩信的项目, 现在有几个问题,请各位帮忙: 1.彩信MMS的具体标准格式是什么? 2.有了彩信文件后怎么打包成PDU? 3.打包成PDU后,已经实现连接了,怎么把彩信发送到一个指定的手机后? 是不是 ...…

查看全部问答>

请教:有没有提供SPI接口,可提供Slave模式的IC?

我可以通过程序随时同步修改SPI通信的内容的? 谢谢帮忙。…

查看全部问答>

stm32lcd显示的问题

在用write_string(char*)函数的时候,只有while(1){write_string(char*);}才能在LCD屏上看到字符串输出;如果不加while(1),就看不到。但这样我的程序就不能往其他地方跑了,从而不能执行其他的功能。怎么来实现字符串输出,而我的程序又能在运 ...…

查看全部问答>

自加密源代码:

把下面的程序段加在main的最前,可以让你的代码自行加密,不会在烧录时产生漏网之鱼://Led_Config(); if(FLASH_GetReadOutProtectionStatus() == SET) {   //Led1_ON();Led2_OFF();Led3_OFF();Led4_OFF() ...…

查看全部问答>

51最小系统

我用万用板 焊了一个51的最小系统 下载简单的程序(跑马灯)没问题,但是我想控制舵机就不行。有没有高人指点一下啊 是有干扰吗?…

查看全部问答>

超低功率高性能新一代产品 MSP430F5xx

MSP430F5xx可以延长电池寿命有广泛的应用前景,提供突破性性能和超低功率、帮助客户开发高级便携应用的全新一代产品   $(\'swf_mf3\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'intern ...…

查看全部问答>