在STVD中开发STM8的程序,遇到一个16位寄存器的读写问题!!原因未知,但是有规律可循

文章讲述了在使用STM8单片机的STVD开发环境中,遇到16位寄存器TIM1_PSCR和TIM1_ARR的赋值问题,发现只有通过分两个8位寄存器单独操作才能正确设置PWM频率,否则会导致预期之外的结果。
摘要由CSDN通过智能技术生成

在STVD中开发STM8的程序,对16位的寄存器访问不能直接对其赋值,必须分H和L两个8位寄存器单独操作,否则无效!

这几天用到了了Time1的PWM功能,其中TIM1_PSCR是定义分频系数的寄存器,使用的时钟源是内部16MHz,分屏系数为1,重载寄存器TIM1_ARR为8000,所以PWM的频率为16M/8000=2000,用示波器测试,发现确实为2000.
调试过程中用于电路限制,想把PWM改为100,所以TIM1_PSCR应该修改为(20-1)=19,于是直接将:
TIM1_PSCR=0;
改为
TIM1_PSCR=19;
结果用示波器测试发现PWM频率还是2000,奇怪??反复检所有寄存器,均没有发现问题,最后查了官方的“STM8S105C_S.h”文件,发现对于这个寄存器的定义是这样的:
/* TIM1 Prescaler register /
DEF_16BIT_REG_AT(TIM1_PSCR,0x5260);
/
Data bits High /
DEF_8BIT_REG_AT(TIM1_PSCRH,0x5260);
/
Data bits Low */
DEF_8BIT_REG_AT(TIM1_PSCRL,0x5261);

也没发现什么问题,但是它确实即定义了16位,也定义了两个8位。按理说是等效的。本着死马当活马医的精神,将:
TIM1_PSCR=19;
改为
TIM1_PSCRL=19;
测试发现PWM的频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值