前言
本博文基于STM32F103ZET6和MDK5以及库V3.5.0编写;
本博文以原子开发板为例;
如有不足之处,还请多多指教;
其实本没有必要写这篇文章,因为只要按照开发板配套的教程去做就可以对芯片写入程序即可,而且开发板上往往设计的都有一键下载的相关电路,能够产生DTR和RTS信号,从而将程序直接下载到芯片,对于用户来说,大大多短了下载程序的时间,提高了效率;但是毕竟以后如果要做开发这块的,总不能碰见一个项目就买一个买开发板,然后才能下载程序,这简直有点不可思议,还是要懂得脱离开发板,对一个芯片进行下载程序,从而形成一个完整的系统,这算得上是一个稍微成熟的开发;
STM32开发板下载程序的两种方式
一: 仿真器下载(J-Link,ULink等等)
步骤:
① 给开发版供电(DC5V),插上J-Link;
② 点击MDK工具栏中的Load按键就可将编译好的程序下载到开发板的Flash;
③ 下载好后根据配置可自动运行,也可以不自动运行(通过对下图中的操作控制);
** 二:** 串口USART1下载(注意,只能是USART1)
步骤:
① 给开发板供电(DC5V),拔掉J-Link,插上串口线;
② 使用FlyMcu软件下载编译好的.Hex文件,搜索串口为开发板硬件串口,一般为COMx,波特率选为115200,其配置如图;(红色箭头处要注意:因为今天我们想通过单纯的串口去下载程序,所以此选项处选择“不使用RTS和DTR”)
STM32F10x.h的存储器以及启动配置(这个知识作为对今天研究概念的补充)
STM32F10x.h的存储结构看下面这位前辈总结的:
https://blog.csdn.net/Vinfcent/article/details/78921974
BOOT0和BOOT1的不同配置决定的CPU启动模式(备注:“x”代表接高电平低电平都可)
三种启动地址所对应的内存映射地址:
图片中数字符号的含义:
1: 主闪存存储器 Flash
2: 系统存储器SYSTEMMEMORY
3: SRAM(掉电丢失);
这个启动模式类似于咱们给电脑换系统的时候,可以选择从机械硬盘,固态,或者U盘启动;
注意:虽然有三种启动模式,但是程序无论是从串口下载还是J-Link下载,最后都是下载到Flash里
针对BOOT0和BOOT1的不同接线方式(高电平,低电平,不接线),开发板的下载情况分析如下图:(“x”代表不接线,“√”代表能成功下载)
总结:
从图片中可以看出,J-Link下载的程序在勾选“Reset and Run”后直接运行,程序是一定能下载成功的,但是不一定能运行成功,并且,J-Link下载模式下,但凡BOOT0=1,都不能执行代码,为什么?因为J-Link将代码下载到Flash中,而决定启动模式的BOOT0和BOOT1配置为了启动方式不是从FLash开始的,读不到代码;
在串口下载模式下(注意不使用DTR和RTS电路下载),程序同样被写入Flash;
无论是用哪一种方式下载程序,程序存储的位置都在Flash,然而BOOT0和BOOT1决定了程序从何处开始处理(PC指针的初始值被配置成什么);所以如果程序下载好了之后,需要将BOOT0和BOOT1的接线方式配置成使程序从Flash处开始启动即可,例如:BOOT0 = 0,BOOT1=1即可;
关键字:STM32 BOOT0 BOOT1 下载程序
引用地址:
STM32 BOOT0和BOOT1对于下载程序的应用
推荐阅读最新更新时间:2024-11-07 15:23
STM32使用JLINK的SWD接口下载程序(keil环境下)
我的keil版本为:V5.24 一、安装Jlink驱动 可移步到网盘下载 传送门 ,提取码:fua6 二、替换dll文件 1、首先找到你安装Keil5的目录,找到ARM这个目录。我的目录如下图,keil的JLINK的dll就在这个目录下。 2、下载dll文件,覆盖上述keil目录下的dll文件 三、设置keil 1、选择jlink驱动 2、选择SW,并配置为5M 3、配置好相应的Flash Download选项(今天忘记勾选Reset and Run导致debug半天!!!)
[单片机]
STM32在IAR中调用之printf函数的一个方法
在串口都配置好的情况下,在main.c文件中加入 #include stdio.h #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { USART_SendData(USART1, (u16) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} return ch;
[单片机]
STM32蜂鸣器-库函数
需要注意的是,使用了库函数的模板就不能胡乱套用寄存器的操作,之前还想放个大招结果出丑了,这里的实验要求是绿灯亮,蜂鸣器响,红灯亮,蜂鸣器停止,蜂鸣器响起间隔半秒,led的文件我这里就不给出了,主要放出beep的文件吧,这里操作的是PF8口。 1.beep.h #ifndef __BEEP_H #define __BEEP_H #include sys.h #define BEEP PFout(8) void beep_init(void); #endif 2.beep.c #include beep.h void beep_init() { GPIO_InitTypeDef GPIO_InitS
[单片机]
stm32快速学习3——简单按键中断
2个按键中断,控制2个LED Main文件 #include stm32f10x.h void RCC_Configuration(void); void GPIO_Configuration(void); void EXTI_Configuration(void);//外部中断设置 void NVIC_Configuration(void);//中断优先级别设置 unsigned char led_bit1=0; unsigned char led_bit2=0; int main(void) { RCC_Configuration(); GPIO_Configuration(); EXTI_
[单片机]
STM32之RTC实时时钟
RTC实时时钟简介: STM32的RTC外设,实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断).但是从掉电还能继续运行来看,它是STM32中唯一一个具有这个功能功能的外设.(RTC外设的复杂之处不在于它的定时,而在于它掉电还可以继续运行的特性) 所谓掉电,是指电源Vpp断开的情况下,为了RTC外设掉电可以继续运行,必须给STM32芯片通过VBAT引脚街上锂电池.当主电源VDD有效时,由VDD给RTC外设供电.当VDD掉电后,由VBAT给RTC外设供电.无论由什么电源供电,RTC中的数据始终都保存在属于RTC的备份域中,如果主电源和VBA都掉电,那么
[单片机]
STM32的DMA用串口的接收
测试终端,打算设计成串口直接到串口转发,中间使用DMA是否可行?支持外设到外设? 1. 假如使用DMA去传输的,从一个串口到另外一个串口(或者数组),DMA如何确定每次接收到的串口数据有更新,DMA是否需要中断,DMA两端只需要有地址就行,那么DMA每次去读取串口的接收寄存器和程序去读效果一样的吗?DMA和串口FIFO存在同时使用的情况吗? 2. DMA设置好自动运行的吗?有中断,比如发送完成中断 3. DMA如何确定串口的上一个数据发送完成?如果太快,岂不是乱? 4. 假设是串口接收的话,使用DMA,不需要串口中断?DMA知道串口数据更新? 5. 在STM32的书上,是DMA把数组里面的数据传给串口,只要设置好串口即可。 6.
[单片机]
STM32硬件调试详解
STM32的基本系统主要涉及下面几个部分: 一、电源 1)、无论是否使用模拟部分和AD部分,MCU外围出去VCC和GND,VDDA、VSSA、Vref(如果封装有该引脚)都必需要连接,不可悬空; 2)、对于每组对应的VDD和GND都应至少放置一个104的陶瓷电容用于滤波,并接该电容应放置尽量靠近MCU; 3)、用万用表测试供电电压是否正确。调试时最好用数字电源供电,以便过压或过流烧坏板子。电压最好一步一步从进线端测试到芯片供电端。 二、复位、启动选择 1)、Boot引脚与JTAG无关。其仅是用于MCU启动后,判断执行代码的起始地址; 2)、在电路设计上可能Boot引脚不会使用,但要求一定要外部连接电阻到地或
[单片机]
STM32 PWM问题
本文不提供完整程序,仅点出要点 1:时钟配置。因为PWM输出属于复用功能,所以时钟使能必须使能RCC_APB2Periph_AFIO ; 2:IO口使能。因为PWM属于复用功能,所以IO输出设置要配置成GPIO_Mode_AF_PP;而不能配置成普通输出IO的GPIO_Mode_OUT_PP模式; 3:PWM初始化代码如下,本程序只用通道3输出,所以pwm输出只配置了通道3,TIM_OC3Init(TIM3, &TIM_OCInitStructure);需要多通道输出PWM则需要配置多个PWM输出通道,通过改变TIM_Pulse 的值可以改变pwm的占空比(可以通过直接操作寄存器TIM3- CCR3=2400来实现)。 /* Ti
[单片机]