看到公司提供的库函数对于PWM的时钟设置,提供了一个函数如下:
SysCtlPWMClockSet()
我理解是对主频分频下来做PWM的时钟信号,可是感觉这样下来没看到效果啊?请问有谁有理解?
//PWM时钟配置:不分频
SysCtlPWMClockSet(SYSCTL_PWMDIV_1);
括号里面是有参数的,SYSCTL_PWMDIV_1 是一分频的宏;
楼主可以参看StellarisWarer软件库中的PWM部分例程;
也可以在官网上下载外设驱动库应用指南查阅库函数的具体用法:www.ti.com/.../spmu019m.pdf
liu zhang 说:看到公司提供的库函数对于PWM的时钟设置,提供了一个函数如下:
SysCtlPWMClockSet()
我理解是对主频分频下来做PWM的时钟信号,可是感觉这样下来没看到效果啊?请问有谁有理解?
你说得没错,确实是对主频分频下来作为PWM的时钟信号。
不过PWM的脉宽或者周期还需要用函数PWMPulseWidthSet或PWMGenPeriodSet来设定。这样你才能够看到波形发生变化。
你可以参考以下datasheet中有关pwm的初始化和配置相关内容:
初始化和配置
以下是对PWM发生器0进行初始化的示例,要求频率为25KHz,PWM0管脚上的占空比为25%,
PWM1管脚上的占空比为75%,这个实例假定系统时钟为20MHz。
1. 使能PWM时钟,通过写0x0010.0000到系统控制模块中的RCGC0 寄存器来实现。
2. 使能对应GPIO模块的时钟,通过系统控制模块中的RCGC2 寄存器来实现
3. 在GPIOCTL模式中,根据管脚具体的功能,使用GPIOAFSEL 寄存器来使能相应的管脚。
4. 配置GPIOPCTL 寄存器中的PMCn字段,为相应的引脚分配PWM信号。
5. 配 置 系 统 控 制 模 块 中 的 运 行 - 模式时钟配置( RCC ) 寄存器配置为使用PWM分频
(USEPWMDIV) ,并将分频器(PWMDIV)设置为分频2 (000)。
6. 将PWM发生器配置为递减计数模式,并立即更新参数。
■ 向PWM0CTL 寄存器写入0x0000.0000.
■ 向PWM0GENA寄存器写入0x0000.008C.
■ 向PWM0GENB寄存器0x0000.080C.
7. 设置周期。若要得到25Khz频率,即周期为1/25,000(40μs)。PWM时钟源为10MHz;由系
统时钟2分频得到。这意味着一个定时器周期等于400个PWM时钟。然后用这个值来设置
PWM0LOAD 寄存器。在递减模式中,将PWM0LOAD 寄存器的load字段设置为请求的周期减1。
■ 向 PWM0LOAD 寄存器写入0x0000.018F (399)。
8. 将PWM0管脚的脉冲宽度设置为25%占空比。
■ 向PWM0CMPA 寄存器写入0x0000.012B。(299)
9. 将PWM1管脚的脉冲宽度设置为75%占空比。
■ 向PWM0CMPB 寄存器写入0x0000.0063。(99)
10. 启动PWM发生器0中的定时器。
■ 向PWM0CTL寄存器写入0x0000.0001。
11. 使能PWM输出.
■ 向PWMENABLE 寄存器写入0x0000.0003。
请看第5步和第7步,你完成了第5步……