stm8复位时的PC值是0x000000,它是是怎么跳到0x006000去的呢?

stm8复位时的PC值是0x000000,它是是怎么跳到0x006000去的呢?,第1张

stm8有两种 有bootloader和没有 有的reset会跳转到0x006000,没有的会直接跳转到0x008000
复位永远不可能到0x000000 stm8是统一寻址,0x000000是ram的第一个位置而已

IAR里面是这样定义的;

/-------------------------------------------------------------------------
       Port D bit fields
 -----------------------------------------------------------------------/
#ifdef __IAR_SYSTEMS_ICC__
#define PD_ODR_ODR0              PD_ODR_bitODR0
#define PD_ODR_ODR1              PD_ODR_bitODR1
#define PD_ODR_ODR2              PD_ODR_bitODR2
#define PD_ODR_ODR3              PD_ODR_bitODR3
#define PD_ODR_ODR4              PD_ODR_bitODR4
#define PD_ODR_ODR5              PD_ODR_bitODR5
#define PD_ODR_ODR6              PD_ODR_bitODR6
#define PD_ODR_ODR7              PD_ODR_bitODR7
#define PD_IDR_IDR0              PD_IDR_bitIDR0
#define PD_IDR_IDR1              PD_IDR_bitIDR1
#define PD_IDR_IDR2              PD_IDR_bitIDR2
#define PD_IDR_IDR3              PD_IDR_bitIDR3
#define PD_IDR_IDR4              PD_IDR_bitIDR4
#define PD_IDR_IDR5              PD_IDR_bitIDR5
#define PD_IDR_IDR6              PD_IDR_bitIDR6
#define PD_IDR_IDR7              PD_IDR_bitIDR7
#define PD_DDR_DDR0              PD_DDR_bitDDR0
#define PD_DDR_DDR1              PD_DDR_bitDDR1
#define PD_DDR_DDR2              PD_DDR_bitDDR2
#define PD_DDR_DDR3              PD_DDR_bitDDR3
#define PD_DDR_DDR4              PD_DDR_bitDDR4
#define PD_DDR_DDR5              PD_DDR_bitDDR5
#define PD_DDR_DDR6              PD_DDR_bitDDR6
#define PD_DDR_DDR7              PD_DDR_bitDDR7
#define PD_CR1_C10               PD_CR1_bitC10
#define PD_CR1_C11               PD_CR1_bitC11
#define PD_CR1_C12               PD_CR1_bitC12
#define PD_CR1_C13               PD_CR1_bitC13
#define PD_CR1_C14               PD_CR1_bitC14
#define PD_CR1_C15               PD_CR1_bitC15
#define PD_CR1_C16               PD_CR1_bitC16
#define PD_CR1_C17               PD_CR1_bitC17
#define PD_CR2_C20               PD_CR2_bitC20
#define PD_CR2_C21               PD_CR2_bitC21
#define PD_CR2_C22               PD_CR2_bitC22
#define PD_CR2_C23               PD_CR2_bitC23
#define PD_CR2_C24               PD_CR2_bitC24
#define PD_CR2_C25               PD_CR2_bitC25
#define PD_CR2_C26               PD_CR2_bitC26
#define PD_CR2_C27               PD_CR2_bitC27
#endif
比如你要PD1输出高电平就是 PD_ODR_ODR1 = 1;

STM8等待(Wait)模式在运行模式下执行WFI(等待中断)指令,可进入等待模式。此时CPU停止运行,但外设与中断控制器仍保持运行,因此功耗会有所降低。等待模式可与PCG(外设时钟门控),降低CPU时钟频率,以及选择低功耗时钟源(LSI,HSI)相结合使用,以进一步降低系统功耗。参见时钟控制(CLK)的说明。在等待模式下,所有寄存器与RAM的内容保持不变,之前所定义的时钟配置也保持不变(主时钟状态寄存器CLK_CMSR)。当一个内部或外部中断请求产生时,CPU从等待模式唤醒并恢复工作。STM8停机(Halt)模式在该模式下主时钟停止。即由fMASTER提供时钟的CPU及所有外设均被关闭。因此,所有外设均没有时钟,MCU的数字部分不消耗能量。在停机模式下,所有寄存器与RAM的内容保持不变,默认情况下时钟配置也保持不变(主时钟状态寄存器CLK_CMSR)。MCU可通过执行HALT指令进入停机模式。外部中断可将MCU从停机模式唤醒。外部中断指配置为中断输入的GPIO端口或具有触发外设中断能力的端口。在这种模式下,为了节省功耗主电压调节器关闭。仅低电压调节器(及掉电复位)处于工作状态。快速时钟启动HSI RC的启动速度比HSE快(参见数据手册中电特性参数)。因此,为了减少MCU的唤醒时间,建议在进入暂停模式前选择HSI做为fMASTER的时钟源。在进入停机模式前可通过设置内部时钟寄存器CLK_ICKR的FHWU位选择HSI做为fMASTER的时钟源,而无需时钟切换。参见时钟控制章节。STM8活跃停机(Active Halt)模式活跃停机模式与停机模式类似,但它不需要外部中断唤醒。它使用AWU,在一定的延时后产生一个内部唤醒事件,延迟时间是用户可编程的。在活跃暂停模式下,主振荡器、CPU及几乎所有外设都被停止。如果AWU和IWD已被使能,则只有LSI RC与HSE仍处于运行状态,以驱动AWU和IWD计数器。为进入活跃停机模式,需首先使能AWU(如AWU章节所述),然后执行HALT指令。

你好,我这边有关XT1511/SK6812灯珠的程序,可以了解一下。
/RGB灯珠,灯带/
#include "IOSTM8S103F3h"
#include "LEDInputDatah"
int main( void )
{
CLK_CKDIVR&= (unsigned char)(~0x18);
CLK_CKDIVR|= (unsigned char)0x00;/设置时钟为内部16M高速时钟/
PC_DDR|=0x20;
PC_CR1|=0x20;
PC_CR2|=0x20;
PC_ODR|=0x20;
reset(); //灯带复位
send_24bits(0xff,0x00,0x00); //第一颗灯亮绿
send_24bits(0x00,0xff,0x00); //第二颗灯亮红
send_24bits(0x00,0x00,0xff); //第三颗灯亮蓝
send_24bits(0xff,0xff,0xff); //第四颗灯亮白
while (1);
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10556433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存