打印
[菜农助学交流]

M0助学板学习第三帖:PWM实验

[复制链接]
3961|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcsgy|  楼主 | 2011-9-25 17:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

实验中用到的几个主要函数:
                                   int32_t  DrvGPIO_InitFunction(E_DRVGPIO_FUNC function);//用来选择IO口的PWM功能
                                   void      DrvPWM_SelectClockSource(uint8_t u8Timer, uint8_t u8ClockSourceSelector);//选择PWM的时钟源
                                   void      DrvPWM_Open(void);//开启PWM时钟,并复位PWM时钟
                                   uint32_t DrvPWM_SetTimerClk(uint8_t u8Timer, S_DRVPWM_TIME_DATA_T *sPt);//设置PWM定时器频率等
                                   void      DrvPWM_SetTimerIO(uint8_t u8Timer, int32_t i32Enable);//使能PWM IO口输出
                                   void      DrvPWM_Enable(uint8_t u8Timer, int32_t i32Enable);//使能PWM工作
           main函数:

/////////////////////////////////////////////////
//工程:PWM实验
//日期:2011年9月25日
////////////////////////////////////////////////
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
#include "DrvPWM.h"
#define LED_PWM_VAL PWMA->CMR0 //通过比较器调节占空比
int main(void)
{

UNLOCKREG();
DrvSYS_Open(48000000); //将时钟设定为48MHz
DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT); //关闭蜂鸣器
DrvGPIO_ClrBit(E_GPB, 10);

DrvGPIO_Open(E_GPA, 2, E_IO_OUTPUT); // 设置GPA2端口为输出模式
DrvGPIO_Open(E_GPA, 3, E_IO_OUTPUT); // 设置GPA3端口为输出模式
DrvGPIO_Open(E_GPA, 4, E_IO_OUTPUT); // 设置GPA4端口为输出模式
DrvGPIO_Open(E_GPA, 5, E_IO_OUTPUT); // 设置GPA5端口为输出模式

DrvGPIO_InitFunction(E_FUNC_PWM01); // 设置GPIO口的PWM01功能
DrvPWM_SelectClockSource(DRVPWM_TIMER0,DRVPWM_HCLK); //选择系统时钟作为PWM的时钟
DrvPWM_Open(); //使能PWM时钟并复位
DrvSYS_Delay(500);
{
S_DRVPWM_TIME_DATA_T spt;
spt.u8Mode=1; // 自动装载模式
spt.u8HighPulseRatio=0; //占空比取值0到100
spt.i32Inverter=1; //反转输出开启
spt.u32Frequency=8000; //设定平率为8000Hz
spt.u8ClockSelector=0; //
spt.u8PreScale=0;
spt.u32Duty=0; //捕捉定时用的计数值

DrvPWM_SetTimerClk(DRVPWM_TIMER0,&spt); //初始化TIMER0时钟
}
DrvPWM_SetTimerIO(DRVPWM_TIMER0,1); //使能IO输出
DrvPWM_Enable(DRVPWM_TIMER0,1); //使能PWM0让它工作
{
uint16_t ledpwmval=0;
uint8_t dir=1;
while(1) //这里参考了正点原子的STM32不完全手册PWM实验部分
{
DrvSYS_Delayms(10);
if(dir)
{
ledpwmval++;
}
else if(dir==0)
{
ledpwmval--;
}
if(ledpwmval>400)
{
dir=0;
}
else if(ledpwmval==0)
{
dir=1;
}
LED_PWM_VAL=ledpwmval; //加载数值到CMR0比较器中来调节其占空比



}
}

}

工程包: PWM实验.rar (260.54 KB)

相关帖子

沙发
毅如靳往| | 2011-9-25 19:26 | 只看该作者
支持~

使用特权

评论回复
板凳
206022219002| | 2011-11-9 16:33 | 只看该作者
下来看看。

使用特权

评论回复
地板
ahljj| | 2013-1-18 22:20 | 只看该作者
。。。。。。

使用特权

评论回复
5
零度888| | 2014-4-28 11:26 | 只看该作者
支持

使用特权

评论回复
6
零度888| | 2014-4-28 11:27 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:从零开始

6

主题

232

帖子

1

粉丝