打印
[STM8]

第一次用 定时器3,总结

[复制链接]
楼主: 明月小厨
手机看帖
扫描二维码
随时随地手机跟帖
21
明月小厨|  楼主 | 2012-12-10 11:05 | 只看该作者 回帖奖励 |倒序浏览
明月小厨 发表于 2012-12-10 11:00
/*TIM3第2通道(PD0),控制LED灯亮度;*/
/*自动进行*/
/*和IO端口对应的寄存器好象不需要设置,以TIM的设置为 ...

直接操作寄存器又直观又灵活,代码长度也短;

使用特权

评论回复
22
麦田里的守望者| | 2012-12-10 11:09 | 只看该作者
STM32新手,还是看不太懂,,我有一块M32开发板是STM32F103ZE的

使用特权

评论回复
23
Regsen| | 2012-12-10 11:13 | 只看该作者
问题是查到了。在发生溢出中断的时候,定时器1捕获中断的2、3、4中断标志位都被置1。所以一直捕获中断。现在在查为什么溢出时候捕获会中断标志变高

使用特权

评论回复
24
明月小厨|  楼主 | 2012-12-10 11:25 | 只看该作者
因为编程工作非常细致,不能有一点点错误;所以在查资料,写代码的过程中,要有一种忘我的精神.
如果顺利,1小时内就摸的比较清楚了;上面这个PWM用时30分钟有了;要求不太高,仅一个固定的PWM设置;如果不顺利(定时部分),到天亮了还没搞清楚什么地方错了(其实是在中断服务程序里手动清除状态寄存器没做);那就悲惨了.

在后半夜工作显然不好,对身体不好,影响一大家人;而且白天的精神状态肯定不行了;但后半夜的工作效率有可能是最高的.

使用特权

评论回复
25
明月小厨|  楼主 | 2012-12-10 11:30 | 只看该作者
带着问题看资料:
问题1:PWM周期怎么确定;
问题2:占空比怎么设;
问题3:输出到引脚和比较结果对应的电平怎么确定;
问题4:没有别的问题
问题5:启动定时器试试;

使用特权

评论回复
26
明月小厨|  楼主 | 2012-12-10 11:33 | 只看该作者
相关的寄存器只有3个,
TIM3_CCMR2:pwm模式
TIM3_CCER1:输出到引脚
TIM3_CCR2:占空比
其它相关寄存器上次定时的时候已经看过了;

使用特权

评论回复
27
明月小厨|  楼主 | 2012-12-10 11:37 | 只看该作者
Regsen 发表于 2012-12-10 11:13
问题是查到了。在发生溢出中断的时候,定时器1捕获中断的2、3、4中断标志位都被置1。所以一直捕获中断。现 ...

2个方面的内容要查:
1.中断使能寄存器对应的位:允许相关的中断标志有效时中断吗?
2.有些事件发生的时候,会问你,要不要设置相关的标志位;
能解决其中的一个,就行了,如果二方面都解决了,就很干净了;

使用特权

评论回复
28
明月小厨|  楼主 | 2012-12-10 11:39 | 只看该作者
申请中断了,并允许中断了,那就中断了;主方向上是二个环节.

使用特权

评论回复
29
明月小厨|  楼主 | 2012-12-10 11:46 | 只看该作者
T3比较简单,只向上计数,PWM的结果只能是左边或右边沿对齐(3个通道);
如果是T1,双向计数,可以产生中间对齐的效果;
STM8S的PWM波是真正的PWM波,可以设置很小的步距;占空比的设置范围也是很宽的;
不象有的8位,说有PWM功能,仔细一看,PWM波的频率只有很少几个值可以设;

使用特权

评论回复
30
Regsen| | 2012-12-10 20:37 | 只看该作者
楼主今天写完了PWM脉冲后打算做什么了。我这边有三原色灯,什么时候有空了,学学楼主。我捕获中断的问题最后找到了,当某个捕获通道不使用的时候,溢出中断发生会将SR1中的UIF置位的同时,也置位不使用的捕获/比较通道的中断标志位

使用特权

评论回复
31
明月小厨|  楼主 | 2012-12-10 22:30 | 只看该作者
I2C目前没法完成,至少要二个板子;UART也是这样的,SPI今年我很少用,明年用的时候再研究;
ADC应该很简单的;近期试一下.EEPROM擦,读,写要测试,这个要用的;这个PWM只是单路的,以后我要试6个通道的PWM,试着控制电机;今天在想这事,如果STM8的抗干扰能力有限,这个测试就没有必要了;

STM8S能用就够了,下一步有可能去试试STM32的片子;

使用特权

评论回复
32
pkat| | 2012-12-10 23:52 | 只看该作者
多写总结还是很有好处的

使用特权

评论回复
33
火箭球迷| | 2012-12-11 00:01 | 只看该作者
LZ精神可嘉,总结写的还是有点乱,需要再整理一下

使用特权

评论回复
34
明月小厨|  楼主 | 2012-12-11 14:06 | 只看该作者
麦田里的守望者 发表于 2012-12-10 11:09
STM32新手,还是看不太懂,,我有一块M32开发板是STM32F103ZE的

STM32远比STM8要复杂;处处要小心,什么字的对齐,什么大端小端的;而且中断部分还夹杂着一大堆的汇编;

使用特权

评论回复
35
明月小厨|  楼主 | 2012-12-11 14:18 | 只看该作者
今天的主要任务很简单;操作EEPROM;
第一次接触,一时摸不清楚;有一大堆的疑问;
如:开锁解锁,状态查询甚至中断就不提了;疑问:
1)如果是字节编程:是直接写到目标地址?如果目标地址的数据非空会怎么样?(自动擦除或写入失败)
2)如果是字编程,还是直接写数据?连续写4个字节的数据?和1)有什么不同?
   会不会有专用的缓冲区(寄存器);如系统专用的32位寄存器X;把数据写到X,然后再完成写操作;
3)如果是块编程;情况又会怎么样?
第二次写操作,是否要重新解锁?
相关的部分还有选项字节(这个暂不细究).

如果指定目标区域的首地址,再指定数据源的首址(有的是编号),再指定数据的长度;提交给系统,让系统自动处理就好了;
有的ARM里就是这样处理的;调用固件库函数;你提供参数,它完成任务;

使用特权

评论回复
36
明月小厨|  楼主 | 2012-12-11 15:14 | 只看该作者
字节和字编程,看了一些例程,就是最直接的写入即可;
设编程时间;
解锁;

设编程模式(为字编程);//字节编程时忽略此项;
直接写数据;
查询写操作结束的标志;
结束;

浪费我这么多时间.

使用特权

评论回复
37
明月小厨|  楼主 | 2012-12-11 20:53 | 只看该作者
测试STM8S105,往EEPROM写数据块;非常失败;
一开始没有成功;是因为照抄的例程可能有错误;函数的返回指令例程中说是0x81;但我对照手册查来查去,应该是0x87;
改成0x87后,写EEPROM的任务完成了,也的确写进去了;但程序从RAM里退出来就费劲了,估计是迷路;

使用特权

评论回复
38
明月小厨|  楼主 | 2012-12-11 21:55 | 只看该作者
查了一下过往的贴子,能顺利操作EEPROM块写入的不多;只要触发了块写入操作;随便你怎么查标志,甚至不查标志;CPU的操控大权可能永远和你无关了;这个时候只有看门狗能帮你;
所以,在正式操作前,最好主动点把相关的外部设备(MPU以外的)关掉;然后静等死机后的复位;
神奇的EEPROM;:@

使用特权

评论回复
39
明月小厨|  楼主 | 2012-12-12 01:11 | 只看该作者
阶段性的结论:
测试STM8S105,往EEPROM写数据块;非常失败;原因不详,明天再试一试,不行就先搁置,以后有时间再测试;
注:可以正确顺利地进行块写入操作,但写完了呢?——系统失控了.
不完全是因为测试查询标志位导致死机;还有其它的原因。

使用特权

评论回复
40
明月小厨|  楼主 | 2012-12-12 16:00 | 只看该作者
明月小厨 发表于 2012-12-11 20:53
测试STM8S105,往EEPROM写数据块;非常失败;
一开始没有成功;是因为照抄的例程可能有错误;函数的返回指令例程 ...

IRET:0x80   中断服务程序返回
RET:0x81    普通的返回;不远处就近返回.
RETF:0x87  返回,但范围更远些;

后二者有可能和编译器的设置有关;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则