你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32学习笔记01—STM32F103环境搭建

[复制链接]
STMCU 发布时间:2020-10-27 13:34
STM32学习笔记01—STM32F103环境搭建
1.1 STM32F103单片机概述
       ARM公司在ARM11以后的产品改用Cortex命名,主要分为三种,Cortex-M系列,Cortex-R系列和Cortex-A系列,Cortex系列属于ARMv7架构,这是2010年为止ARM公司最新的指令集架构,其中Cortex-M主要用于低端的嵌入式控制系统中,Cortex-R主要用于实时系统中,Cortex-A系列则是用于操作系统,智能设备和移动电话等领域,比如常见的Cortex-A15(用于Android,Ubuntu等系统中)。


       意法半导体(ST公司)开发的STM32就属于Cortex-M架构,该架构细分又可以分为M0,M0+,M3,H7等,以最常见的STM32F103为例,该芯片属于Cortex-M3架构,CPU主频72MHz,内置高精度ADC,USART,CAN,USB,SDIO等模块,极大的便于产品的设计。


以STM32F103ZET6为例,该芯片封装为LQFP-144,内置资源如下所示:


(1)1组17通道高精度ADC,1组15通道ADC,1组13通道ADC,转换速度可达1us;
(2)1组2路DAC输出;
(3)8组高级定时器(可以做电容捕捉,PWM输出,基本定时等功能);
(4)高精度RTC模块,2路时钟可选;
(5)1组CAN,支持任意波特率;
(6)2组硬件IIC;
(7)3组硬件SPI;
(8)5组串口
(9)1组SDIO模块,用于外接SD卡通信;
(10)1组USB模块,可做主机,可做从机;
(11)2组I2S模块,用于I2S通信;
(12)1组CRC模块;
(13)2组看门狗模块;
(14)1组DMA模块;


STM32F103ZET6实物图片如下图所示。
1.png
1.2 STM32F103ZET6最小系统
1.2.1 原理图
2.png
    STM32F103的最小系统由备用电源,下载接口,滤波电容,启动端子和时钟电路组成,其中滤波电容主要用于稳定CPU电源端口电压,由于CPU电源端口有12组,所以利用12个100nF电容来稳定每个端口的电压,布线的时候,每个电容离着供电端口越近越好。
1.2.2 时钟电路
3.png
    单片机最小系统有两个晶体振荡器,其中8MHz提供主系统工作时钟脉冲,即CPU内核,系统总线和除RTC时钟外其他外设的工作时钟,32.768KHz时钟专用于CPU内部RTC时钟脉冲。


1.2.3 复位电路
4.png
    由于STM32F103属于低电平复位,所以设计了如上图所示电路进行复位,初始状态电容两端电压为0,相当于低电平,上电后,电容开始充电,随着充电时间的上升,电容两端电压呈现指数上升(电路分析中专门讲解过这部分内容),随着电容充满电,电容两端理论电压逐渐达到3.3V,此时复位结束,如果想要不断电复位,只需要按一下按键S1,按下按键后,电容对地放电,放完电后达到低电平,此时开始复位,然后重复上电复位的过程。


1.2.4 启动选择端口
5.png
STM32有三种启动方式,通过BOOT0和BOOT1的电平选择,具体分配如下表所示。
6.png
一般启动程序都在FLASH中启动,如果出现芯片进入低功耗模式或者禁用了调试端口,那么串口激活是唯一的办法,所以建议设计产品的时候,BOOT0和BOOT1两个引脚用0Ω电阻引出来。


1.2.5 VBAT供电
7.png


    VBAT供电主要用于RTC和备份区域数据不丢失使用,当外部3.3V断电之后,二极管D1处于截止状态,此时D2负极处于电平,二极管D2正向导通,通过3V纽扣电池给VBAT供电,防止RTC和备份区域的数据丢失。


1.2.6 串口下载与SW仿真
8.png
    STM32下载程序有两种方式,一种是传统的串口模式,通过BOOT0和BOOT1启动系统存储器,然后将程序烧写进FLASH中,然后断电,设置FLASH启动后就可以启动程序,还有一种特殊的方式,就是SW模式,SW模式一种单线FLASH烧写模式,通过CLK和DATA两根线,将程序直接烧写进FLASH,并且通过这两根线进行在线仿真,可以直接将CPU中所有寄存器的值全部实时读取,用于简化调试过程。这个功能是51单片机不会有的。


1.2.7 电源电路
9.png


    STM32F103采用3.3V电源进行供电,但是一般USB接口或者充电宝都是输出DC5V,这就需要一个LDO来进行电压变换,将5V电压转换为3.3V电压供STM32使用。


1.3 STM32工程创建
       STM32的程序也是可以使用51的IDE编写的,KEIL作为集成开发环境,现在已经可以大多数主流CPU,比如之前的51系列,这次的ST系列,还有NXP公司的iMX系列等,下面来说明如何使用KEIL来创建STM32程序。


       STM32的工程不同于51的工程,需要好几个文件来支持,由于这次创建的是空白工程,所以只需要创建主函数的c文件,启动汇编文件,和STM32寄存器文件。


(1)安装ARM版本的KEIL,从KEIL官网或者文中附带的链接下载安装包,安装时记住不能有中文路径,直接安装即可。


链接:https://pan.baidu.com/s/1cdk69c-CKiF6PfebpbNTAw


提取码:1p94


(2)安装STM32F1系列固件库,从KEIL官网找到安装包,下载后安装(注:KEIL版本必须是ARM版本的,C51版本安装不上)。


链接:https://pan.baidu.com/s/173qByEAwwrsPMwzvkxDrLA


提取码:lryg


下载固件库之后,双击安装即可。


(3)在工程文件夹中创建四个子文件夹,HEADERWARE,OBJECT,USER和SYSTEM,各文件夹内容如下所示。


USER:存放工程文件,汇编启动文件与主函数的c文件


SYSTEM:存放系统文件,串口1文件和滴答时钟文件


HEADERWARE:存放其他的驱动文件


OBJECT:存放编译过程的链接文件以及最终的HEX文件
10.png
(4)新建工程,输入工程保存路径后点击保存。
11.png
(5)选择目标芯片型号,我们使用的芯片型号是STM32F103ZET6
13.png
14.png
(6)点击工程设置,添加系统文件夹
15.png
    点击红框选中的位置来新建文件夹,双击新建的文件夹修改名称,创建和步骤3目录一样的文件夹,如下图所示。
16.png
(7)创建启动汇编文件
17.png
点击保存,输入文件名stm32f103x.s后保存进User文件夹。
18.png

输入以下代码,由于以下代码是固定的,所以可以直接复制

  1. Stack_Size    EQU    0x00000400

  2.         AREA  STACK, NOINIT, READWRITE, ALIGN=3
  3. Stack_Mem    SPACE  Stack_Size
  4. __initial_sp

  5. Heap_Size    EQU    0x00000200

  6.         AREA  HEAP, NOINIT, READWRITE, ALIGN=3
  7. __heap_base
  8. Heap_Mem    SPACE   Heap_Size
  9. __heap_limit

  10.                 PRESERVE8
  11.                 THUMB

  12. ; Vector Table Mapped to Address 0 at Reset
  13.                 AREA    RESET, DATA, READONLY
  14.                 EXPORT    __Vectors
  15.                 EXPORT    __Vectors_End
  16.                 EXPORT    __Vectors_Size

  17. __Vectors    DCD    __initial_sp        ; Top of Stack
  18.         DCD    Reset_Handler        ; Reset Handler
  19.         DCD    NMI_Handler          ; NMI Handler
  20.         DCD    HardFault_Handler      ; Hard Fault Handler
  21.         DCD    MemManage_Handler      ; MPU Fault Handler
  22.         DCD    BusFault_Handler      ; Bus Fault Handler
  23.         DCD    UsageFault_Handler      ; Usage Fault Handler
  24.         DCD    0              ; Reserved
  25.         DCD    0              ; Reserved
  26.         DCD    0              ; Reserved
  27.         DCD    0              ; Reserved
  28.         DCD    SVC_Handler          ; SVCall Handler
  29.         DCD    DebugMon_Handler      ; Debug Monitor Handler
  30.         DCD    0              ; Reserved
  31.         DCD    PendSV_Handler        ; PendSV Handler
  32.         DCD    SysTick_Handler        ; SysTick Handler

  33.         ; External Interrupts
  34.         DCD     WWDG_IRQHandler        ; Window Watchdog
  35.         DCD     PVD_IRQHandler        ; PVD through EXTI Line detect
  36.         DCD     TAMPER_IRQHandler      ; Tamper
  37.         DCD     RTC_IRQHandler        ; RTC
  38.         DCD     FLASH_IRQHandler      ; Flash
  39.         DCD     RCC_IRQHandler        ; RCC
  40.         DCD     EXTI0_IRQHandler      ; EXTI Line 0
  41.         DCD     EXTI1_IRQHandler      ; EXTI Line 1
  42.         DCD     EXTI2_IRQHandler      ; EXTI Line 2
  43.         DCD     EXTI3_IRQHandler      ; EXTI Line 3
  44.         DCD     EXTI4_IRQHandler      ; EXTI Line 4
  45.         DCD     DMA1_Channel1_IRQHandler  ; DMA1 Channel 1
  46.         DCD     DMA1_Channel2_IRQHandler  ; DMA1 Channel 2
  47.         DCD     DMA1_Channel3_IRQHandler  ; DMA1 Channel 3
  48.         DCD     DMA1_Channel4_IRQHandler  ; DMA1 Channel 4
  49.         DCD     DMA1_Channel5_IRQHandler  ; DMA1 Channel 5
  50.         DCD     DMA1_Channel6_IRQHandler  ; DMA1 Channel 6
  51.         DCD     DMA1_Channel7_IRQHandler  ; DMA1 Channel 7
  52.         DCD     ADC1_2_IRQHandler      ; ADC1 & ADC2
  53.         DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX
  54.         DCD     USB_LP_CAN1_RX0_IRQHandler  ; USB Low  Priority or CAN1 RX0
  55.         DCD     CAN1_RX1_IRQHandler      ; CAN1 RX1
  56.         DCD     CAN1_SCE_IRQHandler      ; CAN1 SCE
  57.         DCD     EXTI9_5_IRQHandler      ; EXTI Line 9..5
  58.         DCD     TIM1_BRK_IRQHandler      ; TIM1 Break
  59.         DCD     TIM1_UP_IRQHandler      ; TIM1 Update
  60.         DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation
  61.         DCD     TIM1_CC_IRQHandler      ; TIM1 Capture Compare
  62.         DCD     TIM2_IRQHandler        ; TIM2
  63.         DCD     TIM3_IRQHandler        ; TIM3
  64.         DCD     TIM4_IRQHandler        ; TIM4
  65.         DCD     I2C1_EV_IRQHandler      ; I2C1 Event
  66.         DCD     I2C1_ER_IRQHandler      ; I2C1 Error
  67.         DCD     I2C2_EV_IRQHandler      ; I2C2 Event
  68.         DCD     I2C2_ER_IRQHandler      ; I2C2 Error
  69.         DCD     SPI1_IRQHandler        ; SPI1
  70.         DCD     SPI2_IRQHandler        ; SPI2
  71.         DCD     USART1_IRQHandler      ; USART1
  72.         DCD     USART2_IRQHandler      ; USART2
  73.         DCD     USART3_IRQHandler      ; USART3
  74.         DCD     EXTI15_10_IRQHandler    ; EXTI Line 15..10
  75.         DCD     RTCAlarm_IRQHandler      ; RTC Alarm through EXTI Line
  76.         DCD     USBWakeUp_IRQHandler    ; USB Wakeup from suspend
  77.         DCD     TIM8_BRK_IRQHandler      ; TIM8 Break
  78.         DCD     TIM8_UP_IRQHandler      ; TIM8 Update
  79.         DCD     TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and Commutation
  80.         DCD     TIM8_CC_IRQHandler      ; TIM8 Capture Compare
  81.         DCD     ADC3_IRQHandler        ; ADC3
  82.         DCD     FSMC_IRQHandler        ; FSMC
  83.         DCD     SDIO_IRQHandler        ; SDIO
  84.         DCD     TIM5_IRQHandler        ; TIM5
  85.         DCD     SPI3_IRQHandler        ; SPI3
  86.         DCD     UART4_IRQHandler      ; UART4
  87.         DCD     UART5_IRQHandler      ; UART5
  88.         DCD     TIM6_IRQHandler        ; TIM6
  89.         DCD     TIM7_IRQHandler        ; TIM7
  90.         DCD     DMA2_Channel1_IRQHandler  ; DMA2 Channel1
  91.         DCD     DMA2_Channel2_IRQHandler  ; DMA2 Channel2
  92.         DCD     DMA2_Channel3_IRQHandler  ; DMA2 Channel3
  93.         DCD     DMA2_Channel4_5_IRQHandler  ; DMA2 Channel4 & Channel5
  94. __Vectors_End

  95. __Vectors_Size  EQU  __Vectors_End - __Vectors

  96.         AREA    |.text|, CODE, READONLY
  97. ; Reset handler
  98. Reset_Handler  PROC
  99.         EXPORT    Reset_Handler        [WEAK]
  100.         IMPORT    __main  
  101.         LDR      R0, =__main
  102.         BX      R0
  103.         ENDP

  104. ; Dummy Exception Handlers (infinite loops which can be modified)
  105. NMI_Handler    PROC
  106.         EXPORT    NMI_Handler          [WEAK]
  107.         B    .
  108.         ENDP
  109. HardFault_Handler\
  110.         PROC
  111.         EXPORT    HardFault_Handler      [WEAK]
  112.         B    .
  113.         ENDP
  114. MemManage_Handler\
  115.         PROC
  116.         EXPORT    MemManage_Handler      [WEAK]
  117.         B    .
  118.         ENDP
  119. BusFault_Handler\
  120.         PROC
  121.         EXPORT    BusFault_Handler      [WEAK]
  122.         B    .
  123.         ENDP
  124. UsageFault_Handler\
  125.         PROC
  126.         EXPORT    UsageFault_Handler      [WEAK]
  127.         B    .
  128.         ENDP
  129. SVC_Handler    PROC
  130.         EXPORT    SVC_Handler          [WEAK]
  131.         B    .
  132.         ENDP
  133. DebugMon_Handler\
  134.         PROC
  135.         EXPORT    DebugMon_Handler      [WEAK]
  136.         B    .
  137.         ENDP
  138. PendSV_Handler  PROC
  139.         EXPORT    PendSV_Handler        [WEAK]
  140.         B    .
  141.         ENDP
  142. SysTick_Handler  PROC
  143.         EXPORT    SysTick_Handler        [WEAK]
  144.         B    .
  145.         ENDP

  146. Default_Handler  PROC
  147.         EXPORT    WWDG_IRQHandler        [WEAK]
  148.         EXPORT    PVD_IRQHandler        [WEAK]
  149.         EXPORT    TAMPER_IRQHandler      [WEAK]
  150.                 EXPORT    RTC_IRQHandler        [WEAK]
  151.         EXPORT    FLASH_IRQHandler      [WEAK]
  152.         EXPORT    RCC_IRQHandler        [WEAK]
  153.         EXPORT    EXTI0_IRQHandler      [WEAK]
  154.         EXPORT    EXTI1_IRQHandler      [WEAK]
  155.         EXPORT    EXTI2_IRQHandler      [WEAK]
  156.         EXPORT    EXTI3_IRQHandler      [WEAK]
  157.         EXPORT    EXTI4_IRQHandler      [WEAK]
  158.         EXPORT    DMA1_Channel1_IRQHandler  [WEAK]
  159.         EXPORT    DMA1_Channel2_IRQHandler  [WEAK]
  160.         EXPORT    DMA1_Channel3_IRQHandler  [WEAK]
  161.         EXPORT    DMA1_Channel4_IRQHandler  [WEAK]
  162.         EXPORT    DMA1_Channel5_IRQHandler  [WEAK]
  163.         EXPORT    DMA1_Channel6_IRQHandler  [WEAK]
  164.         EXPORT    DMA1_Channel7_IRQHandler  [WEAK]
  165.         EXPORT    ADC1_2_IRQHandler      [WEAK]
  166.         EXPORT    USB_HP_CAN1_TX_IRQHandler  [WEAK]
  167.         EXPORT    USB_LP_CAN1_RX0_IRQHandler  [WEAK]
  168.         EXPORT    CAN1_RX1_IRQHandler      [WEAK]
  169.         EXPORT    CAN1_SCE_IRQHandler      [WEAK]
  170.         EXPORT    EXTI9_5_IRQHandler      [WEAK]
  171.         EXPORT    TIM1_BRK_IRQHandler      [WEAK]
  172.         EXPORT    TIM1_UP_IRQHandler      [WEAK]
  173.         EXPORT    TIM1_TRG_COM_IRQHandler    [WEAK]
  174.         EXPORT    TIM1_CC_IRQHandler      [WEAK]
  175.         EXPORT    TIM2_IRQHandler        [WEAK]
  176.         EXPORT    TIM3_IRQHandler        [WEAK]
  177.         EXPORT    TIM4_IRQHandler        [WEAK]
  178.         EXPORT    I2C1_EV_IRQHandler      [WEAK]
  179.         EXPORT    I2C1_ER_IRQHandler      [WEAK]
  180.         EXPORT    I2C2_EV_IRQHandler      [WEAK]
  181.         EXPORT    I2C2_ER_IRQHandler      [WEAK]
  182.         EXPORT    SPI1_IRQHandler        [WEAK]
  183.         EXPORT    SPI2_IRQHandler        [WEAK]
  184.         EXPORT    USART1_IRQHandler      [WEAK]
  185.         EXPORT    USART2_IRQHandler      [WEAK]
  186.         EXPORT    USART3_IRQHandler      [WEAK]
  187.         EXPORT    EXTI15_10_IRQHandler    [WEAK]
  188.         EXPORT    RTCAlarm_IRQHandler      [WEAK]
  189.         EXPORT    USBWakeUp_IRQHandler    [WEAK]
  190.         EXPORT    TIM8_BRK_IRQHandler      [WEAK]
  191.         EXPORT    TIM8_UP_IRQHandler      [WEAK]
  192.         EXPORT    TIM8_TRG_COM_IRQHandler    [WEAK]
  193.         EXPORT    TIM8_CC_IRQHandler      [WEAK]
  194.         EXPORT    ADC3_IRQHandler        [WEAK]
  195.         EXPORT    FSMC_IRQHandler        [WEAK]
  196.         EXPORT    SDIO_IRQHandler        [WEAK]
  197.         EXPORT    TIM5_IRQHandler        [WEAK]
  198.         EXPORT    SPI3_IRQHandler        [WEAK]
  199.         EXPORT    UART4_IRQHandler      [WEAK]
  200.         EXPORT    UART5_IRQHandler      [WEAK]
  201.         EXPORT    TIM6_IRQHandler        [WEAK]
  202.         EXPORT    TIM7_IRQHandler        [WEAK]
  203.         EXPORT    DMA2_Channel1_IRQHandler  [WEAK]
  204.         EXPORT    DMA2_Channel2_IRQHandler  [WEAK]
  205.         EXPORT    DMA2_Channel3_IRQHandler  [WEAK]
  206.         EXPORT    DMA2_Channel4_5_IRQHandler  [WEAK]

  207. WWDG_IRQHandler
  208. PVD_IRQHandler
  209. TAMPER_IRQHandler
  210. RTC_IRQHandler
  211. FLASH_IRQHandler
  212. RCC_IRQHandler
  213. EXTI0_IRQHandler
  214. EXTI1_IRQHandler
  215. EXTI2_IRQHandler
  216. EXTI3_IRQHandler
  217. EXTI4_IRQHandler
  218. DMA1_Channel1_IRQHandler
  219. DMA1_Channel2_IRQHandler
  220. DMA1_Channel3_IRQHandler
  221. DMA1_Channel4_IRQHandler
  222. DMA1_Channel5_IRQHandler
  223. DMA1_Channel6_IRQHandler
  224. DMA1_Channel7_IRQHandler
  225. ADC1_2_IRQHandler
  226. USB_HP_CAN1_TX_IRQHandler
  227. USB_LP_CAN1_RX0_IRQHandler
  228. CAN1_RX1_IRQHandler
  229. CAN1_SCE_IRQHandler
  230. EXTI9_5_IRQHandler
  231. TIM1_BRK_IRQHandler
  232. TIM1_UP_IRQHandler
  233. TIM1_TRG_COM_IRQHandler
  234. TIM1_CC_IRQHandler
  235. TIM2_IRQHandler
  236. TIM3_IRQHandler
  237. TIM4_IRQHandler
  238. I2C1_EV_IRQHandler
  239. I2C1_ER_IRQHandler
  240. I2C2_EV_IRQHandler
  241. I2C2_ER_IRQHandler
  242. SPI1_IRQHandler
  243. SPI2_IRQHandler
  244. USART1_IRQHandler
  245. USART2_IRQHandler
  246. USART3_IRQHandler
  247. EXTI15_10_IRQHandler
  248. RTCAlarm_IRQHandler
  249. USBWakeUp_IRQHandler
  250. TIM8_BRK_IRQHandler
  251. TIM8_UP_IRQHandler
  252. TIM8_TRG_COM_IRQHandler
  253. TIM8_CC_IRQHandler
  254. ADC3_IRQHandler
  255. FSMC_IRQHandler
  256. SDIO_IRQHandler
  257. TIM5_IRQHandler
  258. SPI3_IRQHandler
  259. UART4_IRQHandler
  260. UART5_IRQHandler
  261. TIM6_IRQHandler
  262. TIM7_IRQHandler
  263. DMA2_Channel1_IRQHandler
  264. DMA2_Channel2_IRQHandler
  265. DMA2_Channel3_IRQHandler
  266. DMA2_Channel4_5_IRQHandler
  267.         B    .
  268.         ENDP
  269.         ALIGN

  270. ; User Stack and Heap initialization
  271.         IF      :DEF:__MICROLIB
  272.         EXPORT    __initial_sp
  273.         EXPORT    __heap_base
  274.         EXPORT    __heap_limit
  275.         ELSE  
  276.         IMPORT    __use_two_region_memory
  277.         EXPORT    __user_initial_stackheap
  278. __user_initial_stackheap
  279.         LDR    R0, =  Heap_Mem
  280.         LDR    R1, =(Stack_Mem + Stack_Size)
  281.         LDR    R2, = (Heap_Mem +  Heap_Size)
  282.         LDR    R3, = Stack_Mem
  283.         BX    LR
  284.         ALIGN
  285.         ENDIF
  286.         END
复制代码



(8)修改链接文件与HEX文件的保存路径
19.png
修改HEX的保存路径
20.png
修改链接文件的保存路径
21.png

(9)创建主函数的c文件,创建步骤与步骤7一样,只不过保存的时候,文件后缀变为c,例如1.c。将主函数的c文件保存到User目录下
22.png
(10)在c文件下输入如下代码

  1. #include <stdio.h>
  2. int main()
  3. {
  4.   while( 1 )
  5.   {
  6.    
  7.   }
  8. }
复制代码

(11)将刚才创建的2个文件添加进工程

23.png





收藏 1 评论0 发布时间:2020-10-27 13:34

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版