前提:

开始用的是 cc2530 timer 1来做PWM的,已经可调占空比了,但是由于硬件的改动,需要用timer 3 和 timer 4 代替。由于调试过程中出了些小问题,于是自己把这个贴出来。关键点注释出来。

说说  硬件吧:

timer 1    P1_0 口

timer 3   P1_6   P1_7口。

注意: P1_6 对应着timer 3的通道 0 ,也就是对应着 t3cc0 这类寄存器,而非t3cc1; P1_7对应着timer 3的通道1,也就是对应着t3cc1 这类寄存器。不同的通道,对应着不同的端口。当然,也要选择I/O为外设功能、且将它置为 保留地址2.<具体看代码>

<硬件就没了>

设置timer 3 ,很简单的,只是需要3个寄存器,网络上的资料要么为了编程技巧,写的很复杂。

timer 3 通道 0的寄存器编程,只需要对这三个寄存器进行操作即可:  T3CTL\T3CCTL0\T3CC0,如下图:

其中,T3CNT这个寄存器的属性属于只读属性,向它写值是没有作用的。但是抱歉的是,网络上很多资料都对它赋值,这完全是不需要的。

另外,在output compare mode 下, 要修改 T3CCTLx  T3CCx 的值,必须要等到 T3CNT里面的值清为 0x00 才行,如图:

下面是我对 T3CTL寄存器的设置:

分频、中断失能<非使能>、自由运行模式。<在其他运行模式下没有成功调占空比>

下面是 T3CCTL0 的设置 <自己只是使用了timer 3的通道 0>

注意这个寄存器的 [5:3] 位, 必须选择为 101  ,否则无法调占空比<具体原因后面附图>

至于 T3CC0, 这个里面的值不可以超过 0xFF <当然也无法超过0xFF ~~>.

这整个运行的过程描述如下。

T3CNT 的寄存器 从 0x00 开始不断的 加1 <加1的方式见手册>,每次加1,就和T3CC0的值进行比较。 如果规定在T3CNT 等于 0x00的时候,I/O口的电平为低;当T3CNT的值等于或者大于T3CC0的时候,将I/O口的电平翻转为高;在0xff的时候,将T3CNT的值清为0 <这个清零的过程,是硬件机制做,无法人工干预--唯一能做的是在 T3CTL里面设置>,那么用简短的C可描述如下:

 {
T3CNT = 0x00;
T3CC0 = 0x55;
P1_6 = ;
while() {
T3CNT++;
if (T3CNT >= T3CC0)
P1_6 = ;
if(T3CNT == 0xFF) {
P1_6 = ;
T3CNT = 0x00;
}
}

下面附上一个更加简洁的图片:

如图所示:每次T3CNT的值达到T3CC0的时候,如果我们有设置,I/O端口就该有变化了。变化稳定持续的时间是T3CNT继续加加到0xFF 的时间。然后将清零、翻转。

<I/O 高低电平在X轴上分别持续的时间,分别以蓝色和紫色线标示出来了。如图所示,我们只需更改T3CC0的值,就可以控制它们的比例>

----

ok  贴上代码:

 void int_port_timer3(void)
{
P1DIR |= 0x80;
P1SEL |= 0x80;
P2SEL |= 0x20;
PERCFG |= 0x20;
} void init_timer3(void)
{
T3CC0 = 0x55;
T3CCTL0 = 0x2C;
T3CTL = 0xB0; //别忘记了启动timer 3, 第4位为启动位,应该设为 1
} void start_timer3(void)
{
int_port_timer3();
init_timer3();
}

代码已经不需要解释了,前面很清楚了。至于timer 3的通道1,如上面添加下 T3CC1  T3CTL1两个寄存器即可。

参考本人另外一篇笔记:

cc2530 timer 1 PWM 输出

http://www.cnblogs.com/chineseboy/p/3664355.html

cc2530 timer 3 PWM <可调占空比>的更多相关文章

  1. cc2530 timer 1 PWM 输出

    需要在ZStack 协议栈里使用PWM,于是使用其16bit的timer 1来实现之.使用 P1_0口输出,使用的是正计数/倒计数模式,占空比为50%.代码如下: #include <ioCC2 ...

  2. stm32 pwm 电调 电机

    先上代码 python 树莓派版本,通俗表现原理.stm32 C语言版本在后面 import RPi.GPIO as GPIO import time mode=2 IN1=11 def setup( ...

  3. 51单片机产生1Hz-5kHz可调占空比方波

    学校的课程设计,总结一下. 注意 1.高低电平的改变不适合在主函数的while循环中,因为要有数码管动态显示的延时和其它逻辑处理,时间太长会不能及时改变高低电平值. 2.中断的执行时间一定是不能超过定 ...

  4. 关于STM32 定时器 PWM 实时调节占空比时,预装载特性

    最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图1).反映到器件上也有不同的电压显示,但是在设备运行的时候,就不行了(图2). 图1 图 ...

  5. STM32 Cubemx 输出可调频率与占空比的PWM

    这里就不对STM32的PWM进行讲解了,想要了解的可以百度一下,这里主要说怎么实现. 1.建立工程,我选的是STM32F103zet6芯片,选择定时器的PWM功能 2.配置时钟,我这里配的是内部时钟, ...

  6. 51单片机—使用PWM对直流电机调速

    文章目录 - 什么是PWM - PWM是怎么对直流电机进行调速的 - 通过定时器中断实现PWM调速 - 上代码 - 什么是PWM PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制 ...

  7. 51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1——前进 按键2——后退 按键3——加速 按键4——减速 (板子上只有四个按键) 串口控制 ‘1’——前进 ...

  8. STM32:TIMER输出比较模式-PWM

    在自己小板子上移植PWM时候又重新学习了一下,加入两点:1,对各种输出比较模式的学习:2,输出模式时加入中断 先写出函数: //TIM4 PWM部分初始化 //PWM输出初始化 //period:输出 ...

  9. AVR单片机教程——PWM调光

    本文隶属于AVR单片机教程系列.   PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比.让引脚输出高电平点亮LED,占空比就是100%. 在驱动数码管时 ...

随机推荐

  1. 【HDOJ】4412 Sky Soldiers

    1. 题目描述有$k$个伞兵跳伞,有$m$个汇点.当伞兵着陆后,需要走向离他最近的汇点.如何选择这$m$个结点,可以使得士兵最终行走的距离的期望最小.求这个最小的期望. 2. 基本思路假设已经选好了这 ...

  2. 学习Java Web开发

    学习DreamWaveMX中文版的网页设计技术 HTML网页设计,这是最基本的.学习XML的一些基本知识.初步掌握一些JSCRIPT的应用. 学习JAVA语言. 这应该分成2次来进行: 第1次找一本国 ...

  3. 函数flst_add_last

    /********************************************************************//** Adds a node as the last no ...

  4. 利用Merge Into 更新表,集合数据到数据库中

    使用Merge INTO 将表数据更新到数据库中 创建User-Defined Table Types   创建要更新的UserDetails表 创建更新存储过程 程序调用存储过程 查看结果

  5. servlet规范

    Servlet规范 一个最基本的 Java Web 项目所需的 jar 包只需要一个 servlet-api.jar ,这个 jar 包中的类大部分都是接口,还有一些工具类,共有 2 个包,分别是 j ...

  6. 使用DialogFragment创建对话框总结

    回调Activity中的函数 http://developer.android.com/guide/topics/ui/dialogs.html#PassingEvents 在DialogFragme ...

  7. Delphi word

    [转载]在Delphi中使用CreateOleObject方法 (2011-08-24 14:20:47) 转载▼ 标签: 转载   原文地址:在Delphi中使用CreateOleObject方法作 ...

  8. ZOJ 3469 Food Delivery 区间DP

    这道题我不会,看了网上的题解才会的,涨了姿势,现阶段还是感觉区间DP比较难,主要是太弱...QAQ 思路中其实有贪心的意思,n个住户加一个商店,分布在一维直线上,应该是从商店开始,先向两边距离近的送, ...

  9. Robotium 系列(2) - 简单介绍Monkey和MonkeyRunner

    除了Robotium,Android还有其他的自动化测试方法,比如Monkey和MonkeyRunner. 这里就做一个简单的介绍和使用方法. 本文提纲: 1. Android SDK以及SDK中的工 ...

  10. 【译】 AWK教程指南 9读取命令行上的参数

    大部分的应用程序都允许使用者在命令之后增加一些选择性的参数.执行awk时这些参数大部分用于指定数据文件文件名,有时希望在程序中能从命令行上得到一些其它用途的数据.本小节中将叙述如何在awk程序中取用这 ...