数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2171|回复: 33

[STM] 玩玩STM8之坑总结

[复制链接]
发表于 2024-3-7 16:59:43 | 显示全部楼层 |阅读模式
本帖最后由 springvirus 于 2024-3-8 11:31 编辑

玩玩STM8S103K3,结果没有想象中顺利,不过PB7和PB6的小灯最终还是按照程序控制的样子闪烁了,总结一下,给需要的童鞋们

使用官方的STVD开发编译环境,ST-LINK V2(支持STM32  STM8)+ STVP下载和读取 片内FLASH和片内EEPROM,以及OPTION BYTE

STM8是下载烧录编译后的HEX文件或者S19文件



EEPROM区比较好玩,可以直接敲入字符,然后烧入片子,当时也可以读取回来,也可以保存成HEX文件



----------------------------------------------------------------------------------------------------------------------------------

0. VCAP引脚必须焊接电容到GND,否则ST-LINK通过SWIM接口根本无法识别到目标STM8的片子!!!

我是焊接了贴片1uF电容到GND,就可以了,上电后,VCAP电压(内核电压)为1.8V左右

另外复位电路最好焊接,标准的阻容复位电路。

1. stm8_interrupt_vector.c 非常关键 !!! 必须要有此文件参与编译 !!!且其中内容不能屏蔽掉 !!!!!

因为其中包括中断向量表,位于8000H地址开始的地方



2. 通过SWIM接口烧录完毕后,要拔掉SWIM-RST线,程序才能运行 !!!!



3.不要使用stm8s_it.c,否则与stm8_interrupt_vector.c共存时, 编译报错,可以自己在main.c写中断函数+ 修改stm8_interrupt_vector.c,例如增加TIM4的溢出中断功能

main.c中加入以下:

@far @interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
          /* Cleat Interrupt Pending bit */
          TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}


stm8_interrupt_vector.c中修改后的内容如下:

typedef void @far (*interrupt_handler_t)(void);

struct interrupt_vector {
        unsigned char interrupt_instruction;
        interrupt_handler_t interrupt_handler;
};


@far @interrupt void NonHandledInterrupt (void)
{
        /* in order to detect unexpected events during development,
           it is recommended to set a breakpoint on the following instruction
        */
        return;
}


extern void _stext();     /* startup routine */

extern @far @interrupt void TIM4_UPD_OVF_IRQHandler(void);   // ->  必须要有外部声明,否则编译报错 !!!!

struct interrupt_vector const _vectab[] = {
        {0x82, (interrupt_handler_t)_stext}, /* reset */
        {0x82, NonHandledInterrupt}, /* trap  */
        {0x82, NonHandledInterrupt}, /* irq0  */
        {0x82, NonHandledInterrupt}, /* irq1  */
        {0x82, NonHandledInterrupt}, /* irq2  */
        {0x82, NonHandledInterrupt}, /* irq3  */
        {0x82, NonHandledInterrupt}, /* irq4  */
        {0x82, NonHandledInterrupt}, /* irq5  */
        {0x82, NonHandledInterrupt}, /* irq6  */
        {0x82, NonHandledInterrupt}, /* irq7  */
        {0x82, NonHandledInterrupt}, /* irq8  */
        {0x82, NonHandledInterrupt}, /* irq9  */
        {0x82, NonHandledInterrupt}, /* irq10 */
        {0x82, NonHandledInterrupt}, /* irq11 */
        {0x82, NonHandledInterrupt}, /* irq12 */
        {0x82, NonHandledInterrupt}, /* irq13 */
        {0x82, NonHandledInterrupt}, /* irq14 */
        {0x82, NonHandledInterrupt}, /* irq15 */
        {0x82, NonHandledInterrupt}, /* irq16 */
        {0x82, NonHandledInterrupt}, /* irq17 */
        {0x82, NonHandledInterrupt}, /* irq18 */
        {0x82, NonHandledInterrupt}, /* irq19 */
        {0x82, NonHandledInterrupt}, /* irq20 */
        {0x82, NonHandledInterrupt}, /* irq21 */
        {0x82, NonHandledInterrupt}, /* irq22 */
        {0x82, TIM4_UPD_OVF_IRQHandler}, /* irq23 */
        {0x82, NonHandledInterrupt}, /* irq24 */
        {0x82, NonHandledInterrupt}, /* irq25 */
        {0x82, NonHandledInterrupt}, /* irq26 */
        {0x82, NonHandledInterrupt}, /* irq27 */
        {0x82, NonHandledInterrupt}, /* irq28 */
        {0x82, NonHandledInterrupt}, /* irq29 */
};




4. main.c 要加入下段代码,否则编译例如stm8s_gpio.c时会报错


#ifdef USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param file: pointer to the source file name
  * @param line: assert_param error line source number
  * @retval : None
  */
void assert_failed(u8* file, u32 line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif


5. 随便加了点代码,需要用到STM8S_TIM1.C   STM8S_TIM2.C   STM8S_TIM4.C  
一编译,又NM报错 !!!!!!!!!!!

#error clnk Debug\stm8s103k3_led.lkf:1 segment .text size overflow (4624)

8KB 的FLASH,这就用完了 ????

解决方法:如下图设置再编译就可以了











本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 2家元 +60 收起 理由
jf201006 + 30 謝謝分享
不长叶子的树 + 30

查看全部打赏

发表于 2024-3-7 17:39:22 | 显示全部楼层
stm8不能串口下载,不能jlink下载,个人感觉不如air01 py32这些性价比高

打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-7 17:40:00 | 显示全部楼层
玩这个费时间费眼神,但是很佩服玩这个的人

打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-7 17:41:01 | 显示全部楼层
我也有个下载器,还没玩过呢!

打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-7 18:23:44 | 显示全部楼层
我入门就是stm8,有车规的性能稳定

打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-7 18:53:33 | 显示全部楼层
STM8 硬件上其实没有太大的坑。
要注意的,在手册上都有描述。
要串口下载可以写入bootloader.
泽畔无材 有开源的实现,编译后 大小在 512Byte,我写过配套上位机。

至于软件上,,IAR 解君愁。。


我现在手上还有数百片stm8...


打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-7 20:09:46 来自手机浏览器 | 显示全部楼层
stm8之前价格涨的时候,有好几种pin2pin替换的c51单片机替代。

打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-7 20:49:54 | 显示全部楼层
都玩stm32了,不会再碰stm8

打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-7 22:29:28 | 显示全部楼层
飞向狙沙 发表于 2024-3-7 17:39
stm8不能串口下载,不能jlink下载,个人感觉不如air01 py32这些性价比高

stm8是8位时代的芯片那时候哪有串口下载啊

打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-7 22:48:33 | 显示全部楼层
本帖最后由 595953427@qq 于 2024-3-8 15:41 编辑

STM8建议用 EIDE + IAR for STM8,比STVD好用很多倍

打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-8 08:25:36 来自手机浏览器 | 显示全部楼层
感觉还是IAR好用点…

打赏

参与人数 1家元 +10 收起 理由
springvirus + 10 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-8 08:28:13 | 显示全部楼层
bennanhaier 发表于 2024-3-7 17:41
我也有个下载器,还没玩过呢!

可以抽空玩起来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-8 08:29:57 | 显示全部楼层
inthsunshine 发表于 2024-3-7 20:49
都玩stm32了,不会再碰stm8

平时当然是STM32更多一些,玩玩各个厂家的各个系列片子,感受一下
回复 支持 反对

使用道具 举报

发表于 2024-3-8 08:53:24 | 显示全部楼层
stm8的一根线swim下载还是非常的不错的。
回复 支持 反对

使用道具 举报

发表于 2024-3-8 09:10:09 | 显示全部楼层
STM8还算简单
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-8 09:16:59 | 显示全部楼层
kkstun 发表于 2024-3-8 08:53
stm8的一根线swim下载还是非常的不错的。

实际下载时一般是VCC SWIM GND SWIM-RST,4根线
回复 支持 反对

使用道具 举报

发表于 2024-3-8 09:20:23 | 显示全部楼层
springvirus 发表于 2024-3-8 09:16
实际下载时一般是VCC SWIM GND SWIM-RST,4根线

它是单线通讯的。所有单片机都是需要vcc gnd 还有热重载要用到rst
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-8 09:23:12 | 显示全部楼层
kkstun 发表于 2024-3-8 09:20
它是单线通讯的。所有单片机都是需要vcc gnd 还有热重载要用到rst

通讯是只用到一根swim线
回复 支持 反对

使用道具 举报

发表于 2024-3-8 15:44:24 | 显示全部楼层
soma 发表于 2024-3-7 22:29
stm8是8位时代的芯片那时候哪有串口下载啊

大容量的stm8芯片支持串口烧录,比如stm8s105 stm8s207 stm8s208,需要在烧录选项里面使能BootLoader。
一些小容量的型号不支持串口烧录,比如stm8s001 stm8s003 stm8s103 stm8s903

打赏

参与人数 1家元 +30 收起 理由
springvirus + 30 祝早日摆脱负数~~

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2024-3-8 15:44:51 | 显示全部楼层
飞向狙沙 发表于 2024-3-7 17:39
stm8不能串口下载,不能jlink下载,个人感觉不如air01 py32这些性价比高

大容量的stm8芯片支持串口烧录,比如stm8s105 stm8s207 stm8s208,需要在烧录选项里面使能BootLoader。
一些小容量的型号不支持串口烧录,比如stm8s001 stm8s003 stm8s103 stm8s903

打赏

参与人数 1家元 +30 收起 理由
springvirus + 30

查看全部打赏

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-22 06:49 , Processed in 0.702002 second(s), 25 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表