[菜农助学交流] M0助学板学习第三帖:PWM实验

[复制链接]
 楼主| 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函数:

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

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

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

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

  34. DrvPWM_SetTimerClk(DRVPWM_TIMER0,&spt); //初始化TIMER0时钟
  35. }
  36. DrvPWM_SetTimerIO(DRVPWM_TIMER0,1); //使能IO输出
  37. DrvPWM_Enable(DRVPWM_TIMER0,1); //使能PWM0让它工作
  38. {
  39. uint16_t ledpwmval=0;
  40. uint8_t dir=1;
  41. while(1) //这里参考了正点原子的STM32不完全手册PWM实验部分
  42. {
  43. DrvSYS_Delayms(10);
  44. if(dir)
  45. {
  46. ledpwmval++;
  47. }
  48. else if(dir==0)
  49. {
  50. ledpwmval--;
  51. }
  52. if(ledpwmval>400)
  53. {
  54. dir=0;
  55. }
  56. else if(ledpwmval==0)
  57. {
  58. dir=1;
  59. }
  60. LED_PWM_VAL=ledpwmval; //加载数值到CMR0比较器中来调节其占空比



  61. }
  62. }

  63. }

工程包:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
毅如靳往 发表于 2011-9-25 19:26 | 显示全部楼层
支持~
206022219002 发表于 2011-11-9 16:33 | 显示全部楼层
下来看看。
ahljj 发表于 2013-1-18 22:20 | 显示全部楼层
。。。。。。
零度888 发表于 2014-4-28 11:26 | 显示全部楼层
支持
零度888 发表于 2014-4-28 11:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:从零开始

6

主题

232

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:从零开始

6

主题

232

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部