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

【转】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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版