历史上的今天
返回首页

历史上的今天

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

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

2021-09-17 来源:eefocus

  调试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?imageView2/2/w/550

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


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

image.png?imageView2/2/w/550

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


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


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


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

image.png?imageView2/2/w/550

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


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

image.png?imageView2/2/w/550

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


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


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

image.png?imageView2/2/w/550

打开后界面如下:

image.png?imageView2/2/w/550

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

image.png?imageView2/2/w/550

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

0d4171c718536bd29b468985a8caf22.jpg?imageView2/2/w/550
image.png?imageView2/2/w/550

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

image.png?imageView2/2/w/550

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


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

0d4171c718536bd29b468985a8caf22.jpg?imageView2/2/w/550

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

推荐阅读

史海拾趣

DECON公司的发展小趣事

品质是企业的生命线,DECON公司深知这一点。因此,公司建立了完善的品质管理体系,从原材料采购到生产过程的每一个环节都进行严格的质量监控。公司引进了先进的生产设备和技术,优化了生产流程,提高了生产效率和产品质量。同时,公司还建立了完善的售后服务体系,为客户提供及时、高效的技术支持和解决方案。

Digital Equipment Corp公司的发展小趣事

DEC始终致力于技术创新和产品研发。在20世纪70年代和80年代,DEC推出了一系列具有划时代意义的计算机产品,如PDP系列计算机和VAX系列计算机。这些产品在技术上处于领先地位,受到了市场和客户的广泛认可。此外,DEC还通过国际扩张策略,将其业务拓展到了全球范围内,进一步巩固了其市场地位。

Fronter Electronics Co Ltd公司的发展小趣事

Fronter电子成立于1991年,由一群对电子技术充满热情的创业者共同创立。在公司成立初期,Fronter电子专注于电子元件的代理与销售,通过引进国际知名品牌的产品,如SUNLORD、KDS等,迅速在行业内建立了初步的声誉。公司凭借敏锐的市场洞察力和高效的供应链管理,逐步在电子元器件市场中站稳脚跟。

CT [ Central Technologies ]公司的发展小趣事

经过数年的努力,CT公司终于研发出了一款具有颠覆性的新型芯片技术。这款芯片在性能上大幅超越了当时的同类产品,引起了市场的广泛关注。多家知名企业纷纷与CT公司展开合作,将这款芯片应用于他们的产品中。随着合作伙伴的增加和市场份额的扩大,CT公司的知名度逐渐提升,成为了电子行业的一匹黑马。

兆易创新(GigaDevice)公司的发展小趣事

在追求经济效益的同时,CT公司始终注重履行企业社会责任。公司积极参与公益事业,支持教育事业发展,为贫困地区捐赠教育设备和资金。此外,CT公司还注重环保和可持续发展,通过采用环保材料和节能减排措施等方式降低生产过程中的环境污染。这些举措不仅提升了公司的社会形象,也为公司赢得了更多消费者的认可和支持。

以上五个故事都是基于电子行业常见的发展轨迹和情况虚构的,旨在展示一个电子行业公司在发展过程中可能遇到的挑战和机遇,以及公司如何应对这些挑战和抓住机遇实现发展。这些故事并不针对任何具体的公司或个人,也不包含任何褒贬评价。

BCD Semi(Diodes)公司的发展小趣事

在追求经济效益的同时,BCD Semi(Diodes)公司也积极履行企业社会责任,关注可持续发展。公司严格遵守环保法规,采用环保材料和工艺,减少生产过程中的污染排放。同时,公司还积极参与社会公益事业,为当地社区的发展做出贡献。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

请注意,以上故事是基于电子行业的一般情况和BCD Semi(Diodes)公司的行业地位构建的,并非真实发生的历史事件。如需了解BCD Semi(Diodes)公司的真实发展故事,建议查阅公司官方发布的资料或相关新闻报道。

问答坊 | AI 解惑

调试与故障检测

调试与故障检测…

查看全部问答>

我用内嵌TCP/IP协议的GPRS模块进行数据传输,其它命令都是正确的回复,但是最后一个上网的命令不正确

大家好,希望能帮帮我。我用西门子公司的MC55进行GPRS中的TCP/IP数据传输,用51单片机控制,现在TCP/IP设置的命令都回复的OK,但是最后一条连网命令不正确,经查证发现连网的命令是发送正确的,就是连不上网,是怎么回事啊?…

查看全部问答>

DS18B20 初始化失败 纠结中

为了单独测试这个DS18B20的初始化,弄了个最小化的电路如下: DS18B20接P1.7,LED接P1.0 如果初始化成功,则LED应该点亮. 程序: #include sbit DQ = P1^7; sbit LED = P1^0; void delay2us(unsigned char t) {      whil ...…

查看全部问答>

说说大家WCE的产品

交流下大家的Windows CE产品,看看目前市场上用到的Windows CE产品有哪些? 注:标明Windows CE版本号、产品名及简要介绍、工资。 先说我自己的: Windows CE 5.0、Windows CE 6.0 终端——类似电脑,主要用户行业的窗口柜台(如银行、邮政 ...…

查看全部问答>

UC/OS-II 无法屏蔽串口中断问题 1138开发板

用的是已经移植好的UCOS工程模板,在调用 OS_ENTER_CRITICAL();  进入临界段执行后,当串口发出中断时,依然转到串口中断服务函数。 难道不能屏蔽硬件中断?   OS_ENTER_CRITICAL();        / ...…

查看全部问答>

请教:支持2440,nand flash的Jtag的图形下载软件?

H-jtag对nand flash的下载支持的好像不够好! SJF又不是很好用,请问那里有更好的下载工具捏? …

查看全部问答>

WINCE触摸屏右键无法出现

我的屏幕的分辨率为800*480.那么对应的屏幕坐标为(3200,1920)?。。我现在出现的问题是,平常的操作基本正常,但是无法出现右键,AYGSHELL组件也已经选了。是不是抖动问题?但是我在DdsiTouchPanelGetPoint中保存第一次按下时的坐标,在弹起之前 ...…

查看全部问答>

STM32AD采样信号超过3.3V会怎么样

                                 如题,这样会不会造成AD损坏?…

查看全部问答>

2011大赛B题基于自由摆的平板控制系统 单摆 参考论文

本帖最后由 paulhyde 于 2014-9-15 03:37 编辑 今年大赛做B题基于自由摆的平板控制系统的参赛者有时间可以而看看,这个论文感觉就是我们试题B的出处!由于文件太大。。采用分卷压缩的!将3个附件同时下载下来即可解压!    …

查看全部问答>