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

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个回答

所属标签

相似分享

官网相关资源

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