最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

STM8启动

IT圈 admin 43浏览 0评论

2024年5月28日发(作者:昌明)

STM8启动流程

流程

说明:原创文章,转载请注明出处。

STM8启动过程:

1)首先bootloader(ROM中)从0x6000地址启动。

2)从bootloader跳转到0x8000(内部FLASH起始地址),0x8000后面才是软件设计

可以控制的。很多人不明白的是stm8库里面提供的相关代码,具体流程如下:

a)中断向量表:大家都知道0x8000地址放的是中断函数的地址,而‘0x82’则是stm8

内部的中断指令。程序执行到这会自动跳转到中断向量地址所在函数。

b)mian函数到底从哪开始?

这也许是大家最纳闷的了,起始原来很简单:关键是stm8有个复位中断,定义

stm8_interrupt_vector.c中:

(void @near (*)())0x8200,

_stext, /* RESET */”

1.

2.

3.

4.

5.

6.

7.

8.

9.

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

void @near (* const _vectab[])() =

{

(void @near (*)())0x8200,

_stext, /* RESET */

(void @near (*)())0x8200,

TRAP_IRQHandler, /* TRAP ‐ Software interrupt */

10.

11. (void @near (*)())0x8200,

12. TLI_IRQHandler, /* irq0 ‐ External Top Level interrupt (TLI) */

13.

14. (void @near (*)())0x8200,

15. AWU_IRQHandler, /* irq1 ‐ Auto Wake Up from Halt interrupt */

16. (void @near (*)())0x8200,

17. CLK_IRQHandler, /* irq2 ‐ Clock Controller interrupt */

18. (void @near (*)())0x8200,

19. EXTI_PORTA_IRQHandler, /* irq3 ‐ External interrupt 0 (GPIOA) */

20. (void @near (*)())0x8200,

21. EXTI_PORTB_IRQHandler, /* irq4 ‐ External interrupt 1 (GPIOB) */

22. (void @near (*)())0x8200,

23. EXTI_PORTC_IRQHandler, /* irq5 ‐ External interrupt 2 (GPIOC) */

24. (void @near (*)())0x8200,

25. EXTI_PORTD_IRQHandler, /* irq6 ‐ External interrupt 3 (GPIOD) */

26. (void @near (*)())0x8200,

27. EXTI_PORTE_IRQHandler, /* irq7 ‐ External interrupt 4 (GPIOE) */

28.

29. #ifdef STM8S208

30. (void @near (*)())0x8200,

31. CAN_RX_IRQHandler, /* irq8 ‐ CAN Rx interrupt */

32. (void @near (*)())0x8200,

33. CAN_TX_IRQHandler, /* irq9 ‐ CAN Tx/ER/SC interrupt */

34.

35. #elif defined (STM8S903)

36. (void @near (*)())0x8200,

37. EXTI_PORTF_IRQHandler, /* irq8 ‐ External interrupt 5 (GPIOF) */

38. (void @near (*)())0x8200,

39. NonHandledInterrupt, /* irq9 ‐ Reserved */

40. #else /*STM8S207, STM8S105 or STM8S103*/

41. (void @near (*)())0x8200,

42. NonHandledInterrupt, /* irq8 ‐ Reserved */

43. (void @near (*)())0x8200,

44. NonHandledInterrupt, /* irq9 ‐ Reserved */

45. #endif /*STM8S208*/

46. (void @near (*)())0x8200,

47. SPI_IRQHandler, /* irq10 ‐ SPI End of transfer interrupt */

48. (void @near (*)())0x8200,

49. TIM1_UPD_OVF_TRG_BRK_IRQHandler, /* irq11 ‐ TIM1

Update/Overflow/Trigger/Break interrupt */

2024年5月28日发(作者:昌明)

STM8启动流程

流程

说明:原创文章,转载请注明出处。

STM8启动过程:

1)首先bootloader(ROM中)从0x6000地址启动。

2)从bootloader跳转到0x8000(内部FLASH起始地址),0x8000后面才是软件设计

可以控制的。很多人不明白的是stm8库里面提供的相关代码,具体流程如下:

a)中断向量表:大家都知道0x8000地址放的是中断函数的地址,而‘0x82’则是stm8

内部的中断指令。程序执行到这会自动跳转到中断向量地址所在函数。

b)mian函数到底从哪开始?

这也许是大家最纳闷的了,起始原来很简单:关键是stm8有个复位中断,定义

stm8_interrupt_vector.c中:

(void @near (*)())0x8200,

_stext, /* RESET */”

1.

2.

3.

4.

5.

6.

7.

8.

9.

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

void @near (* const _vectab[])() =

{

(void @near (*)())0x8200,

_stext, /* RESET */

(void @near (*)())0x8200,

TRAP_IRQHandler, /* TRAP ‐ Software interrupt */

10.

11. (void @near (*)())0x8200,

12. TLI_IRQHandler, /* irq0 ‐ External Top Level interrupt (TLI) */

13.

14. (void @near (*)())0x8200,

15. AWU_IRQHandler, /* irq1 ‐ Auto Wake Up from Halt interrupt */

16. (void @near (*)())0x8200,

17. CLK_IRQHandler, /* irq2 ‐ Clock Controller interrupt */

18. (void @near (*)())0x8200,

19. EXTI_PORTA_IRQHandler, /* irq3 ‐ External interrupt 0 (GPIOA) */

20. (void @near (*)())0x8200,

21. EXTI_PORTB_IRQHandler, /* irq4 ‐ External interrupt 1 (GPIOB) */

22. (void @near (*)())0x8200,

23. EXTI_PORTC_IRQHandler, /* irq5 ‐ External interrupt 2 (GPIOC) */

24. (void @near (*)())0x8200,

25. EXTI_PORTD_IRQHandler, /* irq6 ‐ External interrupt 3 (GPIOD) */

26. (void @near (*)())0x8200,

27. EXTI_PORTE_IRQHandler, /* irq7 ‐ External interrupt 4 (GPIOE) */

28.

29. #ifdef STM8S208

30. (void @near (*)())0x8200,

31. CAN_RX_IRQHandler, /* irq8 ‐ CAN Rx interrupt */

32. (void @near (*)())0x8200,

33. CAN_TX_IRQHandler, /* irq9 ‐ CAN Tx/ER/SC interrupt */

34.

35. #elif defined (STM8S903)

36. (void @near (*)())0x8200,

37. EXTI_PORTF_IRQHandler, /* irq8 ‐ External interrupt 5 (GPIOF) */

38. (void @near (*)())0x8200,

39. NonHandledInterrupt, /* irq9 ‐ Reserved */

40. #else /*STM8S207, STM8S105 or STM8S103*/

41. (void @near (*)())0x8200,

42. NonHandledInterrupt, /* irq8 ‐ Reserved */

43. (void @near (*)())0x8200,

44. NonHandledInterrupt, /* irq9 ‐ Reserved */

45. #endif /*STM8S208*/

46. (void @near (*)())0x8200,

47. SPI_IRQHandler, /* irq10 ‐ SPI End of transfer interrupt */

48. (void @near (*)())0x8200,

49. TIM1_UPD_OVF_TRG_BRK_IRQHandler, /* irq11 ‐ TIM1

Update/Overflow/Trigger/Break interrupt */

发布评论

评论列表 (0)

  1. 暂无评论