除非STM8片子的空的,如果复位运行的是自带Bootloader,而且要通过串口下载程序的话,必须在1s内点击上位机,要不然就运行用户程序了。 这一步很麻烦,所以想把它给省掉。 后来发现上位机Flash Loader Demonstrator在启动画面点击Next后,会先从串口的DTR、RTS输出一个大概100多毫秒的脉冲,TTL电平就是负脉冲了,之后才会和单片机通信。 所以只要按照下面的图接线,如果单片机复位运行的是自带Bootloader,只要在Flash Loader Demonstrator启动画面点击Next,软件就会复位单片机,不用自己手动复位再点击Next就可以和单片机通信了。
还有就是下载STM8S或STM8L时候的Flash Loader Demonstrator启动画面设置不一样
STM8S是这样:
STM8L是这样:
还有关于复位是否运行自带Bootloader,至少符合下面两个条件之一就可以了
1、器件是空的(新买的就是空的)
2、optionbyte里的Bootloader是Enable的
新的器件optionbyte里的Bootloader是disable的,为了能不止一次使用串口下载程序,第一次下载的程序必须修改optionbyte使得Bootloader Enable
这是STM8S的程序:
#include "iostm8.h"
void main(void)
{
FLASH_DUKR = 0xae;
asm("nop");
FLASH_DUKR = 0x56;
asm("nop");
while(!(FLASH_IAPSR & 0x08));
asm("nop");
FLASH_CR2 = 0x80;
asm("nop");
FLASH_NCR2 = 0x7f;
asm("nop");
*((unsigned char *)0x487e) = 0x55;
asm("nop");
*((unsigned char *)0x487f) = 0xaa;
while(1);
}
这是STM8L的程序:
#include "iostm8L152c6.h"
void main(void)
{
FLASH_DUKR = 0xae;
asm("nop");
FLASH_DUKR = 0x56; // 解除写保护
asm("nop");
while(!(FLASH_IAPSR & 0x08)); // 等待解锁
asm("nop");
FLASH_CR2 = 0x80; // 对选项字节进行写操作
asm("nop");
*((unsigned char *)0x480b) = 0x55;
asm("nop");
*((unsigned char *)0x480c) = 0xaa; // 写入选项字节
while(1);
}
关键字:STM8 手动复位 Bootloader 串口下载
引用地址:
STM8不用手动复位进入自带Bootloader方法(串口下载)
推荐阅读最新更新时间:2024-11-09 20:14
STM8与汇编语言(1)(2)(3)
STM8与汇编语言(1) 不知是心血来潮,还是其它因素,突然又想起玩汇编语言了。这几年也没少跟单片机打交道,包括51系列,430系列,ARM系列,但都是用C语言来开发。不过由于使用C语言,实际上对这些CPU的了解还是不够深刻,当然除了51之外,因为那是我多年前曾经用汇编开发过的芯片。尽管当今C语言已经在嵌入式产品的开发过程中成为主流,但我个人依然认为,要想真正了解CPU的特点,还得用汇编语言。不知道这种观点是对还是错,也许是因为自己从硬件做起,写过机器码,用汇编语言做过优化,因此对汇编语音有一种特殊的偏爱。 51系列的芯片用多了,感觉有时写起程序来不太方便,因此总想寻找一些其它的8位单片机玩玩,正好手头有一个ST的三合一开
[单片机]
STM8 自动唤醒(AWU)
简介 AWU是用来当MCU进入低功耗的活跃停机(Active Halt)模式时提供一个内部的唤醒时间基准。该时间基准的时钟是由内部的低速RC振荡器时钟(LSI)或者通过预分频的HSE晶振时钟来提供的。 STM8的LSI时钟测量 在使用LSI低速内部时钟时,为了确保最好的精度,它的频率可以通过TIM3的输入捕捉1来测定。 (表18:AWU时钟框图) 注意:LS低速时钟源的选择是通过编程CKAWUSEL选项位来实现的。详见时钟控制器章节。 AWU操作 为了使用STM8的AWU功能,按顺序执行如下步骤: 1.使用AWU_CSR寄存器的MSR位和TIM3的输入捕捉通道1来检测LS的时钟频率; 2.通过写AWU_APR的APR 位来定义
[单片机]
stm8开发环境和stlink驱动在win8下安装教程
将ST-LINK-V2插到电脑上之后会发现上面的D1灯一直在闪烁,这表示此时stlink还没被电脑识别。下载驱动程序: http://pan.baidu.com/s/1dDGHvot 如果连接失效可以百度,有的是。之后就是安装问题。在我的电脑(计算机)上右键,选“管理”,“设备管理器”,发现软件设备中有一个带黄叹号的图标,正是我们未识别的stlink,双击后在属性中选择“更新驱动”,选择自动寻找,会发现出现数字签名问题。下面我们就来解决数字签名问题: 鼠标移动到右侧边处悬停一会出现WIN8右侧边栏--选择设置--选择更改电脑设置--常规--最下面高级启动立即重启--重启电脑中.....选择疑难解答--选择高级选项--选择
[单片机]
STVP编译时出现“Error creating process for executable cxstm8”
STVP在编译程序时出现如下问题: ----------- Project d164060 - STM8 Cosmic - Configuration Debug ------------- Removing intermediate files ... Done! ----------- Project d164060 - STM8 Cosmic - Configuration Debug ------------- Compiling adc.c... cxstm8 +debug -pxp -no -l +mods0 -pp -i C:Program Files (x86)STMicroelectronicsCXS
[单片机]
STM32的BootLoader升级
从串口升级固件 ①Jump_To_Application = (pFunction)(*(vu32*) (IAPSTART + 4)); __MSR_MSP(*(vu32*) IAPSTART); Jump_To_Application(); 跟踪__MSR_MSP(一般这个函数都在库文件里有,跟踪不到就用搜索找)找到汇编函数为 __MSR_MSP MSR MSP, r0 ; set Main Stack value BX r14 ②//跳转到应用程序段 //appxaddr:用户代码起始地址. void iap_load_app(u32 appxaddr) { if(((*(vu32*)appxa
[单片机]
STM8使用SPI通信需要注意的几个问题
概述: 在使用STM8L101F3单片机,SPI通信读取三轴传感器ADXL362数据时,出现了一系列的问题,在这里做个笔记,也希望可以给大家一个小的参考。 问题一: 在SPI初始化过程中,没有初始化MISO,MOSI,SCLK三个引脚,导致在通信过程中写数据读数据出现问题。所以在这里贴出测试后可以正常运行的SPI初始化代码。(STM8L101F3,使用官方标准库) #include stm8l10x.h #include stm8l10x_spi.h #include stm8l10x_gpio.h /***************************SPI相关定义*****************
[单片机]
STM8 中关于PWM1 和 PWM2的区别
STM8中PWM1和PWM2模式是时钟输出PWM波形控制的一个必选参数,使用库函数原型如下: void TIMx_OC2Init(TIM2_OCMode_TypeDef TIM2_OCMode, TIM2_OutputState_TypeDef TIM2_OutputState, uint16_t TIM2_Pulse, TIM2_OCPolarity_TypeDef TIM2_OCPolarity) 函数中的第一个参数TIM2_OCMode_TypeDef就是指定当前的 PWM波形模式是PWM1或PWM2,关于这两者的区别通俗点讲就是: PWM1中空控
[单片机]
IAR+STM8——GPIO
第二天,从最基本的IO操作开始学习。在STM上IO绝大多数是GPIO。 刚开始学习,测试程序不要搞复杂,越简单越不容易出错。下面是代码,没有使用STM8官方固件库。 // GPIO测试 #i nclude iostm8s207sb.h #define LED1_FLASH PD_ODR_ODR3 = !PD_ODR_ODR3 // 开发板上的LED1接在PD3上 void delay(unsigned int count) { while(count--); } void GPIO_init(void) { PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出 PD_CR1 = 0x08; // 设置P
[单片机]