微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 开源可编程手环学习第六步--Timer实验

开源可编程手环学习第六步--Timer实验

时间:10-02 整理:3721RD 点击:

第一节       LED硬件电路


       该实验使用到LED,手环有三个可控LED,分别接在MCU的P22、P20、P29这三个引脚,每个LED串联1K的限流电阻,如下图所示:



开发板系列教程:http://pan.baidu.com/s/1bnBJsMr
手环DIY开源学习教程:http://pan.baidu.com/s/1eQlUGiI

阅读软件:http://pan.baidu.com/s/1o6ELGCE

淘宝小店:shop115904315.taobao.com



第二节 Timer寄存器


2.1 Timer介绍

      软件定时器模块包含两个定时器模块,它们可以通过软件控制、编程并用于各种任务。

2.1.1 Timer0

      定时器0有16位的通用定时器;可以产生两路脉宽调制信号;可编程的输出频率;可编程的占空比;可编程的软件中断。

2.1.2 Timer2

       定时器2有14位的通用定时器;可以产生3路脉宽调制信号;输入时钟频率为16MHz;可编程的输入频率;占空比可调;用于白色LED的亮度控制。

2.2 寄存器介绍
2.2.1 定时器0控制寄存器

15:4位:保留不使用;

3位:PWM模式选择,’0’表示PWM信号为高时输出’1’,’1’表示PWM信号为高时输出快时钟信号的二分频,则输出频率范围为1~8MHz;

2位:定时器0的时钟分频,为’1’使用选择的时钟源频率,为’0’使用选择的时钟源进行10分频,注意这个值适用于计数寄存器;

1位:时钟源选择,’1’使用快时钟(16、8、4、2MHz),’0’使用慢时钟(32KHz);

0位:定时器0控制位,’0’表示定时器0关闭并处于复位状态,’1’定时器0运行。

2.2.2 定时器0计数控制寄存器

      定时器0计数重新装载值,如果读取该寄存器则返回当前计数器的值。

2.2.3 定时器0高电平重新装载值

     定时器0高电平重新装载值,如果读取该寄存器则返回定时器0的计数值。

2.2.4 定时器0低电平重新装载值

     定时器0低电平重新装载值,如果读取该寄存器则返回定时器0的计数值。

2.2.5 PWM2占空比

    PWM2信号的占空比。

2.2.6 PWM3占空比

     PWM3信号的占空比。

2.2.7 PWM4占空比

     PWM4信号的占空比。

2.2.8 PWM2,3,4的频率

    PWM2、3、4信号的频率,三个信号频率相同。

2.2.9 PWM2,3,4控制寄存器

2位:硬件暂停使能,为’1’则硬件可以停止PWM2、3、4。

1位:软件暂停使能,为’1’则PWM2、3、4暂停。

0位:PWM信号使能,为’1’则PWM2、3、4使能。

2.3 寄存器配置讲解

#define CLK_PER_REG             (* ( volatile uint16*)0x50000004)

#define TIMER0_CTRL_REG         (* ( volatile uint16*)0x50003400)

#define TIMER0_ON_REG           (* ( volatile uint16*)0x50003402)

#define TIMER0_RELOAD_M_REG     (* ( volatile uint16*)0x50003404)

#define TIMER0_RELOAD_N_REG      (* ( volatile uint16*)0x50003406)

#define PWM2_DUTY_CYCLE       (* ( volatile uint16*)0x50003408)

#define PWM3_DUTY_CYCLE        (* ( volatile uint16*)0x5000340A)

#define PWM4_DUTY_CYCLE       (* ( volatile uint16*)0x5000340C)

#define TRIPLE_PWM_FREQUENCY     (* ( volatile uint16*)0x5000340E)

#define TRIPLE_PWM_CTRL_REG       (* ( volatile uint16*)0x50003410)

启动Timer0模块的时钟:CLK_PER_REG |= 0x0008;

定时器0初始化,选择高频时钟,正常PWM模式,无分频,则TIMER0_CTRL_REG = 0X0E;

设置计数值为1000,高电平为500,低电平为200,则TIMER0_ON_REG=1000; TIMER0_RELOAD_M_REG=500;TIMER0_RELOAD_N_REG=200;

开定时器中断NVIC_SetPriority (SWTIM_IRQn, 254);NVIC_EnableIRQ(SWTIM_IRQn);

启动定时器TIMER0_CTRL_REG = (TIMER0_CTRL_REG|0x01);


第三节 Timer实验


       实验需要使用的模块有:手环,Jlink调试工具,一根手环下载调试线。

       将JLINK通过下载调试线连接到手环的USB调试接口,JLINK插在有拨码开关的一端,注意丝印标注一一对应,将JLINK插上电脑的USB口,如下图所示:

       打开Timer实验的Keil工程Simple_Timer.uvproj,位于目录:..\ 4_实战教程\1_裸机篇\2_定时器实验\定时器实验。如下图所示:

     使用手环调试下载线连接好Jlink,编译,点击DEBUG,然后点击全速运行,则可以看到LED3闪烁,如下图所示:


开发板系列教程:http://pan.baidu.com/s/1bnBJsMr
手环DIY开源学习教程:http://pan.baidu.com/s/1eQlUGiI

阅读软件:http://pan.baidu.com/s/1o6ELGCE

淘宝小店:shop115904315.taobao.com



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top