历史上的今天

今天是:2024年09月17日(星期二)

2021年09月17日 | STM8单片机 PWM无波形输出解决方法

发布者:VS821001 来源: eefocus关键字:STM8  单片机  PWM  波形输出 手机看文章 扫描二维码
随时随地手机看文章

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


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


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


void TIM1_Init( void )

{

    TIM1_CCMR2 = 0x60;          //TIM1 CH2 输出模式 PWM1

    TIM1_CCER1 |= 0x10;         //CC2为输出

    TIM1_PSCRH = 0x00;

    TIM1_PSCRL = 0x03;          //16M/(1+3)=4 M

    

    TIM1_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的比较值,也就是计数器会和这个值进行比较。当计数器的值大于这个值之后,输出的电平就会翻转。

image.png

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


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

image.png

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


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


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


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

image.png

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


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

image.png

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


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


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

image.png

打开后界面如下:

image.png

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

image.png

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

0d4171c718536bd29b468985a8caf22.jpg
image.png

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

image.png

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


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

0d4171c718536bd29b468985a8caf22.jpg

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

关键字:STM8  单片机  PWM  波形输出 引用地址:STM8单片机 PWM无波形输出解决方法

上一篇:STM8将库函数移植为寄存器方法
下一篇:STM8输出PWM变频时波形断开解决方法

推荐阅读

据了解,美国研究人员研制出一种可穿戴的超声波贴片。能无创的监测皮肤下方4厘米深处的动脉血压,从而更早、更精确地检测出心血管问题。这种贴片可实时、持续地监测心脏病、肺病患者以及重症患者的血压变化。可穿戴的超声波贴片为一层薄薄的弹性有机硅,带有所谓的“岛桥”结构——小型电子零件阵列(岛),每个都由弹簧形电线(桥)连接。每个岛都包含称...
Ⅰ、写在前面本文接着上一篇文章“Configuration(Ⅰ)”进行讲述Configuration后面三项Shortcut Keys快捷键、Text Completion代码完形、Other其他的内容。Shortcut Keys快捷键:Keil软件里面所有快捷键都可以在Configuration配置中查看的到,也可以自定义快捷键。Text Completion代码完形:包含代码自动完成、代码模板、语法错误检测等。Other其他:...
协作应用提供全系列即插即用机器人工具的制造商OnRobot参展第22届中国国际工业博览会,带来一站式协作应用全系列产品和解决方案。同期,OnRobot还发布了即插即用的机器人打磨装置OnRobot Sander。 OnRobot亚太区总经理James Taylor表示:“我们非常高兴参展此次工博会。OnRobot打造协作应用一站式商店的愿景,与本届工博会“智能互联赋能产业新发展”的...
广告摘要声明广告撰文 | 张浩程过去两年受紧张国际关系、疫情、自然灾害影响,全球半导体产能不足,我国半导体供应受限情况愈发严重,但与此同时,5G、人工智能、云计算等新技术发展以及消费电子增量市场的持续爆发,我国芯片需求进一步增加。随着芯片紧缺的情况进一步凸显,芯片已成为与石油同等重要的“战略物资”,半导体行业的扩产势在必行,亟需新...

史海拾趣

问答坊 | AI 解惑

问个问题,大家看下

我想定义一下51单片机P2口的高四位,用一个变量表示,大家有没有好的办法啊,指教一下…

查看全部问答∨

Linux下有串口监控工具吗?

可以在Ubuntu下安装像windows下那样的串口监控工具吗?…

查看全部问答∨

【备战2013国赛系列大讲堂】----手工焊接技术

本帖最后由 paulhyde 于 2014-9-15 03:23 编辑 …

查看全部问答∨

TI的BLDC 库 BLDC3-1谁有啊

谁有TI的BLDC 库 BLDC3-1啊?在TI的官网找了很也没找到,郁闷 记得以前很好找的…

查看全部问答∨

用于MSP430™ MCU 的UCOS

现在提供用于 MSP430™ MCU 的全新 Micrium RTOS 代码样例 如果您在设计医疗及其他安全关键型应用,那么目前针对 MSP430 微控制器提供的 Micrium 公司的 µC/OS-II™ 和 µC ...…

查看全部问答∨

VHDL学习理解

一. 关于端口VHDL共定义了5种类型的端口,分别是In, Out,Inout, Buffer及Linkage,实际设计时只会用到前四种。In和Out 端口的使用相对简单。这里,我们主要讲述关于buffer和inout使用时的注意事项。与Out 端口比,Buffer端口具有回读功能,也即 ...…

查看全部问答∨

在LM3S9B92上用IAR在线调试ucosII时出现指针越界

我的开发环境是IAR6.40.1+Jlink+LM3S9B92+ucosIIv2.92(官方移植代码) 我的ucosIIv2.92移植代码(移植到LM3S9B92)是从ucosII的官网上获得的,未经任何修改,但在单步调试到如下 步骤时会出现指针越界情况 OSStartHighRdy     LDR&nb ...…

查看全部问答∨

IAR编译ZStack-CC2530为可下载运行的HEX文件的正确配置

最近几个月一直在研究zigbee技术,发现有用的资料特少而且好多还有错误。就比如如何生成hex这步相当重要可以说为制作bootloader做铺垫的。先来一个网上比较流行的资料吧,其实这位作者说的基本没错,但是可能表述不清,导致让人误解生成hex有两种方 ...…

查看全部问答∨

奋斗,实现梦想

你完全可以不再愤青,不用羡慕,只需要通过自己的努力,创造属于自己的明天。 我们的创业团队,有全球领先的产品,目前只缺少一位FPGA开发人员。 需要一定的经验,更需要一颗奋斗的心。 有兴趣请联系ywf_2002@163.com…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved