打印
[STM8]

STM8S003F3调试跳坑记录

[复制链接]
4010|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aozima|  楼主 | 2016-7-29 10:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 aozima 于 2016-7-29 13:50 编辑

1. CLK->PCKENR1 使能 CLK_PCKENR1_UART1 无效
想降低功耗,单独打开 CLK_PCKENR1_UART1,但UART无输出。
核对资料发现:




解决方法: 不要使用 stm8s.h中的 CLK_PCKENR1_UART1
自己使能 bit3
沙发
aozima|  楼主 | 2016-7-29 13:44 | 只看该作者
2. PD4 TIM2_CH1没有反应

同样的 PD3 TIM2_CH2则完全正常。

经各种跳坑调试后发现,为了使用 PC7 [TIM1_CH2] 和 PC6 [TIM1_CH1]
所以在option bytes里面启动了 AFR0

数据手册对 AFR0 描述如下:
AFR0 Alternate function remapping option 0(2)
0: AFR0 remapping option inactive: Default alternate functions(1)
1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =
TIM1_CH1; port C7 alternate function = TIM1_CH2.

也就是说 TIM2_CH1也被映射走了,换成 PC5 TIM2_CH1 就完全正常了。

使用特权

评论回复
板凳
aozima|  楼主 | 2016-7-29 13:46 | 只看该作者
本帖最后由 aozima 于 2016-7-29 13:48 编辑

3. 数据手册中有写 AFR0和AFR1不能同时使用,但他们的IO并不冲突呀?而且我目前就这样用了,而且调试正常。
但刚才翻资料看到这句就懵了。

AFR1 Alternate function remapping option 1 (2)
0: AFR1 remapping option inactive: default alternate function(1)
1: Port A3 alternate function = SPI_NSS; port D2 alternate function =TIM2_CH3.

AFR0 Alternate function remapping option 0(2)
0: AFR0 remapping option inactive: Default alternate functions(1)
1: Port C5 alternate function = TIM2_CH1; port C6 alternate function =TIM1_CH1; port C7 alternate function = TIM1_CH2.

1. Refer to the pinout description.
2. Do not use more than one remapping option in the same port. It is forbidden to enable both AFR1 and
AFR0.



这个暂时还没得到答案!为保险起见,决定不使能AFR1,还是修改电路,把 PD2 [TIM2_CH3] 还是换成PA3 TIM2_CH3。

使用特权

评论回复
地板
mmuuss586| | 2016-7-29 20:27 | 只看该作者
谢谢分享;

使用特权

评论回复
5
aozima|  楼主 | 2016-8-27 17:32 | 只看该作者
本帖最后由 aozima 于 2016-8-27 22:36 编辑

4. 不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错

STM8的乘除法指令是8位的,做16位或以上乘法运算时,编译器实际上调用了一个函数(通用作法);
而这个函数竟然用到了几个编译器自定义的全局变量(猜测);
在进入中断时,这几个全局变量是不会被自动保存的,从而造成这个乘法运算函数不可重入;

当主程序和中断同时使用8位以上乘除法时,自然就出错。

从芯片或编译器上面想办法基本上不太可行,那么从软件上规避吧。

使用特权

评论回复
6
lisingch| | 2016-8-27 18:29 | 只看该作者
谢谢分享!

使用特权

评论回复
7
米尔豪斯| | 2016-8-27 21:17 | 只看该作者
这在使用中的确是要注意的,容易搞不清

使用特权

评论回复
8
lt1231| | 2016-8-28 18:29 | 只看该作者
aozima 发表于 2016-8-27 17:32
4. 不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错

STM8的乘除法指令是8位的,做16位或以上 ...

我在中断中做过除法,也没出现你的问题呀?

使用特权

评论回复
9
aozima|  楼主 | 2016-8-29 09:18 | 只看该作者
本帖最后由 aozima 于 2016-8-29 09:19 编辑
lt1231 发表于 2016-8-28 18:29
我在中断中做过除法,也没出现你的问题呀?

建议改进你的测试用例,必须是多处且同时。
算一次时间也不长,必须专门写测试程序,让主程序一直算,中断频繁触发,然后程序自己校验结果。
这样才能很快复现出来。

或编译器升级后,这个函数改进了也有可能。

使用特权

评论回复
10
szjlj168| | 2016-8-29 11:02 | 只看该作者

楼主需要STM8烧录器吗、我有现货

使用特权

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

本版积分规则

个人签名:RTOS RT-Thread

55

主题

2016

帖子

23

粉丝