你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【转】STM8S003F3调试跳坑记录

[复制链接]
feixiang20 发布时间:2017-5-24 10:26
1. CLK->PCKENR1 使能 CLK_PCKENR1_UART1 无效
想降低功耗,单独打开 CLK_PCKENR1_UART1,但UART无输出。
核对资料发现:

1.JPG 2.jpg 3.jpg

解决方法: 不要使用 stm8s.h中的 CLK_PCKENR1_UART1
自己使能 bit3

收藏 1 评论7 发布时间:2017-5-24 10:26

举报

7个回答
feixiang20 回答时间:2017-5-24 10:26:50
本帖最后由 feixiang20 于 2017-5-24 10:29 编辑



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 就完全正常了。
feixiang20 回答时间:2017-5-24 10:27:16
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.


1.jpg

这个暂时还没得到答案!为保险起见,决定不使能AFR1,还是修改电路,把 PD2 [TIM2_CH3] 还是换成PA3 TIM2_CH3。
feixiang20 回答时间:2017-5-24 10:29:34

STM8L流水灯

/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/

#include <stm8l052c6.h>
void delay(unsigned int time);
void main(void)
{
    unsigned char i=0;
    PD_DDR=0x02;          //设置PD1为输出模式
    PD_CR1=0x02;          //设置PD1为推挽输出
    PD_CR2=0x02;          //设置PD1输出速率为16mhz
    PB_DDR=0x1e;          //设置PB1~PB4为输出模式
    PB_CR1=0x1e;          //设置PB1~PB4为推挽输出
    PB_CR2=0x1e;          //设置PB1~PB4输出速率为16mhz
    CLK_CKDIVR=0x07;      //对HSI进行128分频,16MHZ/128=125KHZ
    while(1)
    {
        PD_ODR=0xfd;        //PD1(红)灭
        switch(i)
        {
            case 0: PD_ODR=0xff;break;          //PD1(红)亮
            case 1: PB_ODR=0x02;break;         //PB1继电器启动
            case 2: PB_ODR=0x04;break;         //PB2继电器启动
            case 3: PB_ODR=0x08;break;         //PB3继电器启动
            case 4: PB_ODR=0x10;break;         //PB4继电器启动
        }
        delay(12500);         //延时1S
        i++;
        if(i==5)
        {
          i=0;
        }
    }
}
void delay(unsigned int time)
{
  while(time--);
}
继电器可以换成LED灯

feixiang20 回答时间:2017-5-24 10:29:59
4. 不要在主程序和中断程序中同时做8bit以上的乘除法运算,会出错

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

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

从芯片或编译器上面想办法基本上不太可行,那么从软件上规避吧。
feixiang20 回答时间:2017-5-24 10:30:43

STM8L间隔1S闪烁

/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/


#include <stm8l052c6.h>
void delay(unsigned int time);
void main(void)
{
    int i;
    PD_DDR=0x03;         //设置PD0,PD1口为输出模式
    PD_CR1=0x03;         //设置PD0,PD1口为推挽输出
    PD_CR2=0x03;         //设置PD0,PD1口输出速率为16mhz
    CLK_CKDIVR=0x07;     //对HSI进行128分频,16MHZ/128=125KHZ
    for(i=0;i<10;i++)
    {
        PD_ODR=0xfe;      //PD1(红)亮
        delay(12500);        //延时1S
        PD_ODR=0xfc;       //PD1(红)灭
        delay(12500);        //延时1S
    }
}
void delay(unsigned int time)
{
  while(time--);
}
有需要的朋友可以来看看

feixiang20 回答时间:2017-5-24 10:35:51

STM8S003F3P6共享资料

STM8S003F3P6共享资料.rar (3.51 MB, 下载次数: 63)
feixiang20 回答时间:2017-5-24 10:36:51
STM8S105xxx中文数据手册.rar (1.61 MB, 下载次数: 11)

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版