历史上的今天
返回首页

历史上的今天

今天是:2025年02月04日(星期二)

2020年02月04日 | SysTick定时器实现走马灯的功能

2020-02-04 来源:eefocus

SysTick定时器被集成在NVIC中。因此,只要是Cortex-M3内核的单片机,就都有它。这个学习笔记就用SysTIck定时器来实现走马灯的功能。


SysTIck定时器非常简答,只有四个寄存器。这四个寄存器的含义在《Cortex-M3权威指南》那本书中讲的非常的清楚,这里不复述了,下面只讲讲在STM32上SysTIck有什么特殊之处。按照CMSIS标准,用C语言访问这四个寄存器时使用的寄存器名称分别如下:


SysTIck-》CTRL

SysTick-》LOAD

SysTick-》VAL

SysTick-》CALIB

SysTick-》CALIB的值固定为9000,因此,只有当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间基准。

SysTick定时器实现走马灯的功能

STM32提供了2个时钟源:

0:AHB/8

1:Processorclock(AHB)

因此,SysTick-》CTRL=7表示使用处理器时钟作为时钟源,使能SysTick,并且使能SysTick中断。SysTick-》CTRL=3时频率降为原来的1/8。

我的开发板上有四个LED,分别对应的GPIO端口D的PD2、PD3、PD4和PD7。

下面是例子程序,仍然先是直接设置寄存器。

#include“stm32f10x.h”

#defineRCC_GPIO_LEDRCC_APB2Periph_GPIOD

#defineGPIO_LED_PORTGPIOD

#defineGPIO_LED1GPIO_Pin_2

#defineGPIO_LED2GPIO_Pin_3

#defineGPIO_LED3GPIO_Pin_4

#defineGPIO_LED4GPIO_Pin_7

#defineGPIO_LED_ALLGPIO_LED1|GPIO_LED2|GPIO_LED3|GPIO_LED4

voidLED_Spark(void)

{

staticintstate=0;

switch(state)

{

case0:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED1);

state++;

break;

case1:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED2);

state++;

break;

case2:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED3);

state++;

break;

case3:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED4);

state=0;

break;

default:

state=0;

break;

}

}

intmain(void)

{

SystemInit();

RCC-》APB2ENR|=0x00000020;

GPIOD-》CRL=0x24422244;//PD2PD3PD4PD7SettoOutputmode

SysTick-》LOAD=24000000/200;

SysTick-》CTRL=3;

for(;;)

{

}

}

/**

*@briefThisfunctionhandlesSysTickHandler.

*@paramNone

*@retvalNone

*/

voidSysTick_Handler(void)

{

staticintcount=0;

count++;

if(count==100)

{

LED_Spark();

count=0;

}

}

然后是利用STM32 固件函数库提供的函数的例子。

#include“stm32f10x.h”

#defineRCC_GPIO_LEDRCC_APB2Periph_GPIOD

#defineGPIO_LED_PORTGPIOD

#defineGPIO_LED1GPIO_Pin_2

#defineGPIO_LED2GPIO_Pin_3

#defineGPIO_LED3GPIO_Pin_4

#defineGPIO_LED4GPIO_Pin_7

#defineGPIO_LED_ALLGPIO_LED1|GPIO_LED2|GPIO_LED3|GPIO_LED4

voidLED_Spark(void)

{

staticintstate=0;

switch(state)

{

case0:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED1);

state++;

break;

case1:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED2);

state++;

break;

case2:

GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);

GPIO_ResetBits(GPIO_LED_PORT, GPIO_LED3

推荐阅读

史海拾趣

Computer Conversions Corp公司的发展小趣事

随着公司技术的成熟和知名度的提升,Computer Conversions Corp开始将目光投向国际市场。公司派出专业的市场拓展团队,深入欧洲、亚洲等多个地区进行市场调研。经过一系列精准的市场分析和产品定位,公司成功地将产品推向了全球市场。这一过程中,他们不仅赢得了众多国际客户的信赖,还通过与当地企业的合作,进一步提升了品牌的影响力和市场份额。

Habia Cable公司的发展小趣事

随着公司技术的成熟和知名度的提升,Computer Conversions Corp开始将目光投向国际市场。公司派出专业的市场拓展团队,深入欧洲、亚洲等多个地区进行市场调研。经过一系列精准的市场分析和产品定位,公司成功地将产品推向了全球市场。这一过程中,他们不仅赢得了众多国际客户的信赖,还通过与当地企业的合作,进一步提升了品牌的影响力和市场份额。

Fischer Connectors公司的发展小趣事

随着云计算和大数据技术的兴起,计算机行业迎来了新一轮的变革。Computer Conversions Corp公司迅速调整战略,开始研发与云计算相结合的新型转换设备。通过不断地技术革新和产品迭代,公司成功推出了一系列高效、稳定的云计算转换解决方案,帮助众多企业顺利迁移到了云平台,从而保持了在行业中的领先地位。

Hosiden Corporation公司的发展小趣事

随着全球市场的不断扩展,Hosiden积极实施全球化战略,以满足全球客户对高质量电子产品的需求。公司不仅在日本本土拥有强大的生产基地和销售网络,还通过设立海外分支机构、与国际知名企业建立战略合作关系等方式,不断拓宽其全球市场版图。例如,Hosiden在中国市场通过投资豪熙电电子(上海)有限公司等方式,加强了其在中国及亚太地区的业务布局。

Giga公司的发展小趣事
如自动浇水系统、温度控制系统等,通过定时启动或关闭设备。
DRI Relays Inc公司的发展小趣事

随着电子技术的不断进步,市场对继电器产品的要求也越来越高。DRI Relays Inc公司意识到,只有不断创新才能保持市场竞争力。为此,公司投入大量资金和资源,组建了一支由行业专家组成的研发团队,专注于新技术和新产品的研发。经过数年的努力,公司成功开发出一系列具有自主知识产权的高性能继电器产品,这些产品在市场上取得了巨大的成功,为公司带来了可观的利润。

问答坊 | AI 解惑

研究下驱动步进电机软硬件类型和方法-大赛必备知识

本帖最后由 paulhyde 于 2014-9-15 09:42 编辑 步进电机在控制类系统中使用非常广泛,我设计过步进电机在工业系统中的应用有三次,一次是关于线切割铣床上工件移动的设计,一次是关于超声波小径管无损探伤驱动小径管旋转和探头水平移动的设计,还 ...…

查看全部问答>

IPC不是PC,工控不是制造业

  当IBM退出PC业务时,很多人不解。因为IBM是伟大的企业,他对企业未来的设想永非平常企业所及。今天,我们已经更深刻地体会到:PC,不是高科技,而是制造业。   IPC脱身PC业,从事IPC业务的很多人习惯称其为“工控”。它的身上,亦具备很多P ...…

查看全部问答>

PCI总线的读写

挂在PCI总线上的外设怎么读写?用什么函数?跟CPU内部总线一样读端口就可以了吗?…

查看全部问答>

在VMware上运行VxWorks遭遇"Error loading file! 0xd0003",已经困扰几天了

【环境】PC、XP、Tornado2.2、VMWare、虚拟软驱RamDiskNT、虚拟网卡为AMD的PC-NET,按要求从AMD的网站上下载的最新驱程 【实施】严格按照网上的《嵌入式实时操作系统VxWorks入门》一文搭建;     VMware Network Adapter VMnet1和VMwar ...…

查看全部问答>

RealViewMDK一项功能,节约STM32芯片32%的CODE使用量

   安装了MDK3.23版本之后,在keilarmoardsembeststm32v100开发板例程中,使用Blinky的例程,该例程含有LCD显示,ADC,USART,GPIO,NVIC等功能,在C/C++选项中使用三级优化-o3选项后编译结果:Code=7764,RO-data=468,RW-data ...…

查看全部问答>

请问有关多级菜单的实现

各位前辈:大家好!     请问怎么实现多级菜单。我现在要实现这样一个功能。就是在开机后会进入一个主菜单,然后在主菜单下有四个子菜单,子菜单下还有一级菜单,请问这个一般是怎么实现的呢,还有一个问题用LCD显示屏,怎么刷新这 ...…

查看全部问答>

出大量闲置ARM开发板

本人有多套开发板,处于完全闲置状态,还占地方.准备出了一点,换点别的东西玩玩. 特别是两足机器人的配件,如机械,舵机... EASYARM2200开发板(还有几片芯片) ------------------------------------------------------------------------600 ...…

查看全部问答>

基于STM32和STM8的医疗电子方案

基于STM32和STM8的医疗电子方案,PPT格式,简单介绍了基于stm32的电图机(ECG)  、指甲式脉搏血氧仪、多参数监护仪、B超 、胎心仪、注射泵、输液泵、生化分析仪、麻醉呼吸机,基于stm8的血糖仪以及其它医疗产品的设计…

查看全部问答>

HID的一个问题

最近在调试TI官网上提供的例程,有一个例程提到了This USB demo example is to be used with a PC application (e.g. HID App.exe)我想问一下这个所谓的HID APP.exe是个什么东西?…

查看全部问答>

有人在玩SOC(Cyclone V Device)吗?

有人在玩SOC双ARM9的Cyclone V Device芯片?有何特点和感受,大家来讨论一下!!…

查看全部问答>