本帖最后由 myxiaonia 于 2019-3-12 15:39 编辑
使用stm8s103的定时器2toggle模式生成脉冲值,时钟是16M,TIM2是2分频8M,现在我通过在中断里ccr值加600的方式,生成75us脉宽的脉冲
问题是脉冲宽度一直不准,比较神奇的是会很高频率出现43us,107us这两个值,尽管代码量不是仅仅自增600这么一句,但是我认为完全可以应付
我特意是16位访问的方式写入ccr值,保证是原子操作。
脉冲误差大量的情况都是+-32us,换算成ccr值是256,为什么会是这个值?
256这个值的特殊性我首先想到会不会是因为ccr出现非原子操作,外设寄存器是ccrl和ccrh,为了保证原子性我已经重新定义成16访问的ccr,实际最后的赋值语句是 ldw ccr X
而且600的16进制形式是0x258,即使ccrl和ccrh非原子操作的话ccrh增加的也是2,误差也应该是512
真是百思不得其解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我看标准库确实都是高低字节访问,刚才用串口输出cnt和ccr值,终于发现问题了,ccr值赋值后并没有起效,第二次写入起效上一次写入值
明天我再试试用高低字节赋值,应该就是问题
但是这个影子寄存器的知识是在哪里有详细介绍,tim章节只有提到没有展开,stm8没用多久不太熟
一周热门 更多>