调试STM8单片机PWM功能的时候,经常会遇到一种情况,就是PWM初始化设置完成之后,程序下载到单片机中,确没有任何波形的输出。有时候代码是下载别的调试好的,但是在自己芯片上就是没有波形输出。这时要么骂双穿代码的人忽悠人,上传的代码是错的,要么怀疑自己的单片机坏了。

  现在就来分析一下,命名代码正确,但是确没有波形输出这种情况要如何分析判断。

  首先来看一下PWM的初始化代码

void TIM1_Init( void )
{TIM1_CCMR2 = 0x60;          //TIM1 CH2 输出模式 PWM1TIM1_CCER1 |= 0x10;         //CC2为输出TIM1_PSCRH = 0x00;TIM1_PSCRL = 0x03;          //16M/(1+3)=4 MTIM1_ARRH = 1000 >> 8;       //设定自动重装载值高8位TIM1_ARRL = 1000;            //设置自动重装载值低8位TIM1_CCR2H = 500 >> 8;       //捕获比较寄存器高8位TIM1_CCR2L = 500;            //捕获比较寄存器低8位 占空比值TIM1_BKR = 0x80;            //刹车寄存器 使能OC1输出 定时器不工作时输出无效电平TIM1_CR1 |= 0x01;           //允许定时器中断
}

  设置TIM1_CCMR2为0x60,也就是设置了定时器1的通道2为 PWM1 输出模式。接下来设置TIM1_CCER1寄存器值为0x10,设置了定时器1通道2输出使能。TIM1_PSCR寄存器用于设置定时器的分频器值,这里分频器值设置为3,计数器的时钟频率(f CK_CNT )等于f CK_PSC /( PSCR[15:0]+1)。 根据公式可以计算定时器的频率,系统频率为16M,所以定时器的频率为 16/(3+1)=4M,也就是定时器的工作频率为4M。TIM1_ARR寄存器用于设置自动重装载值,也就是输出PWM的频率,这里设置为1000,定时器的工作频率为4M,自动重转载值为1000,那么PWM输出的频率就为 4000000 / 1000 = 4000HZ,也就是说PWM的输出频率为4K,TIM1_CCR2寄存器用于设置通道2的比较值,也就是计数器会和这个值进行比较。当计数器的值大于这个值之后,输出的电平就会翻转。

  通过官方的资料也可以看出,在PWM1模式下,当计数器的值小于TIM1_CCR的值时,输出有效电平,当计数器的值大于TIM1_CCR的值时,输出为无效电平。

  有效电平是在TIM1_CCER1中设置的。


为0时,默认为高电平有效,所以这里当计数器小于500时,输出高电平,当计数器值大于500时输出电平。

  最后通过TIM1_BKR设置输出使能,TIM1_CR1开启计数器。这样在定时器1通道2引脚就可以输出PWM波了。

  将示波器挂在PC7引脚上,观察波形,这时发现没有任何波形输出?难道PWM的初始化设置有问题? 这里初始化设置的没有任何问题。不过在使用STM8单片机的时候,要特别注意一点。就是单片机引脚的复用功能开启

  在STM8单片机中有一个选项字节,这个选项字节就是专门用于设置单片机IO引脚的复用功能重映射的,因为有的IO口好多个功能,那么具体每个IO口要使用哪个功能,就是由这个选项字节来设置的。

这个OPT2就是用来设置复用功能的,NOPT2是OPT2的反码。这个OPT2共有8个位,每一位用0和1来代表不同的功能。

具体每一位代表的含义如下图所示:

  这个OPT2默认值都为0,也就是说默认的引脚功能都为上面的一行。上面代码中使用的是定时器1通道2引脚,也就是TIM1_CH2,这个功能是通过AFR0位设置的。在表中可以看出AFR0位默认的功能是SPI引脚功能,而PWM需要的TIM功能,必须要将OPT0的第0位,也就是AFR0位设置位1才行。

  这个选项字的设置有两种方法,一种是通道在程序中添加选项字的设置代码,另一种是直接在烧写软件的界面设置。通过代码来设置选项字的方法这里就不介绍了,因为毕竟麻烦,而且容易出错。这里直接介绍使用烧写软件来设置。

这里用到的烧写软件为ST Visual Programmer

打开后界面如下:

用这个软件向单片机烧写程序的时候就可以直接设置选项字了,将上面编写的代码编译。然后使用这个烧写软件打开编译生成的文件。

打开后,用鼠标单击软件下面的OPTIN BYTE选项,这时候就会打开这个代码的选项设置,此时软件上面就会显示AFR0—AFR7的默认选项。通过上面选项字节的表格分析可以知道,这里需要设置的是AFR0,用鼠标点一下AFR0这一行的最后边。


这时候就可以看到AFR0后面的选项就会出现一个向下的箭头,底下总共会出现两个选项,上面的选项也就是设置值为0时的选项,下面的选项是这是值为1时的选项,这里肯定要选择下面的选项。

这时可以看到下面的选项中就可以看到当前设置的功能为 PC5为 TIM2_CH1,PC6 为 TIM1_CH1, PC7 为 TIM1_CH2。同时最左边选项字节状态的第2位值,也变为了01。 说明定时器的功能已经设置成功了。这里要注意一点,这里选项字设置之后,PC5、PC6、PC7三个IO口的默认功能都会发生改变。

设置好之后,直接将代码烧写到单片机中,这时就会发现,示波器上已经输出了波形。

如果以后在调试代码的过程中发现单片机的工作不正常,首先要检测检查IO口使用的功能是不是需要开启重映射功能,确保重映射功能正常后,再检查其他地方。

STM8单片机 PWM无波形输出解决方法相关推荐

  1. STM8学习笔记---PWM互补波形输出

    脉宽调制(PWM,Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量.通信到功率控制与变换的许多领域中. 常见的用法是输出 ...

  2. php 中文截断,PHP中实现中文字串截取无乱码的解决方法

    在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节, ...

  3. 【锁屏】 Ubuntu20.04 锁屏快捷键无反应的解决方法

    [已解决] Ubuntu20.04 锁屏快捷键无反应的解决方法 一开始查找了一下网上的方案,如果下面的命令输出的是false,代表设置正确 gsettings get org.gnome.deskto ...

  4. 电脑连接电视html,电脑HDMI连接电视无信号的解决方法

    现在的液晶电视,HDMI(高清晰度多媒体接口)是标配,通常是用PC或是平板电脑输出影像,通过电视屏幕来显示.笔记本HDMI连接电视机显示无信号,怎么处理?那遇到这样的问题要如何解决呢?下面就合大家说一 ...

  5. 电脑显卡html接口无信号,笔记本电脑HDMI连接电视机显示无信号的解决方法

    记本HDMI连接电视机显示无信号,怎么处理?现在的液晶电视,HDMI(高清晰度多媒体接口)是标配,通常是用PC或是平板电脑输出影像,通过电视屏幕来显示,当遇到笔记本HDMI连接电视机显示无信号该怎么解 ...

  6. linux系统hdmi1无信号,电脑HDMI连接电视无信号的解决方法

    现在的液晶电视,HDMI(高清晰度多媒体接口)是标配,通常是用PC或是平板电脑输出影像,通过电视屏幕来显示.笔记本HDMI连接电视机显示无信号,怎么处理?那遇到这样的问题要如何解决呢?下面就合大家说一 ...

  7. 插入u盘计算机未响应,win7系统插入u盘死机怎么办|win7插入u盘无响应的解决方法...

    ‍‍ 最近有些win7旗舰版用户遇到u盘插入计算机后会出现未响应导致系统死机,虽然等一会儿就能恢复正常,但是每次插入u盘都要卡一下决对是有问题的.遇到在win7系统插入u盘死机怎么办呢?会出现插入u盘 ...

  8. Maven项目配置EL表达式原样输出解决方法

    Maven项目配置EL表达式原样输出解决方法 参考文章: (1)Maven项目配置EL表达式原样输出解决方法 (2)https://www.cnblogs.com/d191/p/11689610.ht ...

  9. php在苹果手机上传不了图片大小,ThinkPHP后台上传图片无默认尺寸解决方法

    原标题:ThinkPHP后台上传图片无默认尺寸解决方法 随着网站移动端的日益普及,对后台数据的兼容性要求也越来越高.后台数据涵盖范围不断扩大的同时,使得程序处理能力也必须逐步提高. 使用ThinkPH ...

最新文章

  1. typedef的作用
  2. 调用天气预报Web Service
  3. 柿子不能和什么同吃?柿子相克食物大盘点
  4. 哪个牌子的平板电脑好_重庆智能会议平板哪个牌子好?软硬件好才是真的好!...
  5. 秘罗地伤痕 -- 暂存小说草稿
  6. [Leetcode][第32题][JAVA][最长有效括号][动态规划][栈][正向逆向结合]
  7. SVN的trunk branch tag
  8. 小米公布Q1手机出货量:驳斥暴跌谣言
  9. 第十一章 Shell常用命令与工具(一)
  10. 《流畅的Python》读书笔记——Python一等函数
  11. c截取字符串中的一部分_2019年!史上最全Python基础题(50道题详解)持续更新中-第二篇...
  12. php 微信H5支付
  13. rgb24转yuv420P
  14. 联想拯救者 Lenovo Legion 通电自启 插电自启 通电开机 插电开机 Wake on AC
  15. You tube music
  16. Android 手写和笔锋研究资料
  17. 麓言科技CAD制图技巧
  18. Tyvj4071放射性辐射尘题解
  19. 阅读笔记_一本书读懂财报
  20. 如何将图片转换、合并为PDF文件?

热门文章

  1. SpringMVC大坑一枚:ContentNegotiatingViewResolver可能不利于SEO
  2. vue页面无操作10分钟内调转到登录页面
  3. (一)STL体系结构基础介绍
  4. Linux 关于解压
  5. 【原创】.NET Core应用类型(Portable apps Self-contained apps)
  6. 基于visual Studio2013解决C语言竞赛题之1067间隔排序
  7. 关于DevExpress的心得
  8. 灵活正确的实现.NET插件机制
  9. Eclipse自定义文档注释和方法注释
  10. pow python用法菜鸟_pow在python中的含义及用法