你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 10694|回复: 24

[STM32F3] NUCLEO-STM32F303 之 GPIO模拟PWM(三)

  [复制链接]

76

主题

5715

回帖

4

蝴蝶豆

论坛元老

最后登录
2020-10-15
发表于 2015-6-4 23:30:12 | 显示全部楼层 |阅读模式
PWM说白了就是高低电平占不同比例的IO输出,GPIO就是可以设置成高低电平,所以用GPIO配合定时器也可以做到PWM的功能。
实验目的:
使用GPIO和定时器模拟周期为20ms,占空比为25%的PWM输出
电路图:
d10.jpg
实验代码:
  1. #include "mbed.h"

  2. Timeout timer;
  3. DigitalOut my_led(LED1);
  4. DigitalOut my_pwm(D10); //  pwm_io 函数使用的IO

  5. int on_delay = 0;
  6. int off_delay = 0;

  7. void toggleOff(void);

  8. void toggleOn(void) {
  9.     my_pwm = 1;//PB6输出高电平
  10.     //
  11.     timer.attach_us(toggleOff, on_delay);
  12. }

  13. void toggleOff(void) {
  14.     my_pwm = 0;//PB6输出低电平
  15.     timer.attach_us(toggleOn, off_delay);
  16. }

  17. // p_us = 信号周期,单位毫秒
  18. // dc   = 信号占空比 (0.0 to 1.0)
  19. void pwm_io(int p_us, float dc) {
  20.     timer.detach();
  21.     //周期、占空比为0直接输出低电平
  22.     if ((p_us == 0) || (dc == 0)) {
  23.         my_pwm = 0;
  24.         return;
  25.     }
  26.     //周期大于等1直接输出高电平
  27.     if (dc >= 1) {
  28.         my_pwm = 1;
  29.         return;
  30.     }
  31.     on_delay = (int)(p_us * dc);//计算高电平时间
  32.     off_delay = p_us - on_delay;//计算低电平时间
  33.     toggleOn();
  34. }

  35. int main() {

  36.     pwm_io(20000, 0.25); // 20ms - 25%

  37.     while(1) {
  38.         my_led = !my_led;
  39.         wait(0.5);
  40.     }
  41. }
复制代码
mbedTimeout对象主要用来在给定的时间后执行给定的函数
实验结果:
用Saleae logic采集的逻辑电平图如下:
QQ图片20150604230718.jpg


<
回复

使用道具 举报

47

主题

3404

回帖

30

蝴蝶豆

版主

最后登录
2020-12-7
发表于 2015-6-5 04:26:38 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
发表于 2015-6-5 08:35:53 | 显示全部楼层
基于MBED的,不错,现在论坛这方面的资源还不多呵,欢迎继续分享
回复 支持 反对

使用道具 举报

8

主题

380

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-11-26
发表于 2015-6-5 09:09:48 | 显示全部楼层
很好,看看 了。
回复 支持 反对

使用道具 举报

27

主题

1709

回帖

42

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2015-6-5 09:20:26 | 显示全部楼层
还不如用硬件PWM。
回复 支持 反对

使用道具 举报

26

主题

48

回帖

0

蝴蝶豆

初级会员

最后登录
2015-6-19
发表于 2015-6-5 11:18:55 | 显示全部楼层
最新的金币已经奖励了!
回复 支持 反对

使用道具 举报

76

主题

5715

回帖

4

蝴蝶豆

论坛元老

最后登录
2020-10-15
 楼主| 发表于 2015-6-5 12:44:21 | 显示全部楼层
ts2000 发表于 2015-6-5 09:20
还不如用硬件PWM。

之所以模拟是为了学习。
回复 支持 反对

使用道具 举报

33

主题

1243

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-3-9
发表于 2015-6-5 12:54:45 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

12

主题

415

回帖

0

蝴蝶豆

高级会员

最后登录
2018-12-6
发表于 2015-6-5 13:56:03 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

2

主题

96

回帖

0

蝴蝶豆

初级会员

最后登录
2015-9-7
发表于 2015-6-5 14:54:22 | 显示全部楼层
怎么波形没有变化?
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版