STM32-------->第二天,Bootloader,启动文件分析,异常向量表,定时器,滴答定时器,独立看门狗,DMA总线,SPI--LCD

bootloader

 

main flash memory -------- 主闪存, 用户的程序烧写到这里

system memory --------- 系统主存, 芯片厂商的启动程序烧写在这里, 固化的

 

STM32F051K8U开发板的启动模式是从主闪存启动

从系统存储器启动, 主要是用在isp(在线编程, 比如量产烧录代码)

根据选定的启动模式,主闪存存储器,系统存储器或 SRAM 按照以下的说明访问:

● 从主闪存存储器启动 : 主闪存存储器被映射到启动存储空间 (0x0000 0000), 但仍然能从原有的地址空间 (0x800 0000) 访问 . 即闪存存储器的内容可从两个地址开始访问,0x00000000 或 0x800 0000。

● 从系统存储器启动 : 系统存储器被映射到启动空间 (0x0000 0000),但仍然能够在它原有的地址空间 (0x1FFF EC00) 访问。

启动文件分析

具体文件:startup_stm32f051x8.s 

AREA    STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem       SPACE   Stack_Size

__initial_sp

 AREA    HEAP, NOINIT, READWRITE, ALIGN=3

__heap_base

Heap_Mem        SPACE   Heap_Size

__heap_limit

启动文件里异常向量表

AREA    RESET, DATA, READONLY

                EXPORT  __Vectors

                EXPORT  __Vectors_End

                EXPORT  __Vectors_Size



__Vectors       DCD     __initial_sp                   ; Top of Stack

                DCD     Reset_Handler                  ; Reset Handler

代码区:

AREA    |.text|, CODE, READONLY

; Reset handler routine

Reset_Handler    PROC

                 EXPORT  Reset_Handler                 [WEAK]

        IMPORT  __main

        IMPORT  SystemInit  

                 LDR     R0, =SystemInit

                 BLX     R0

                 LDR     R0, =__main

                 BX      R0

                 ENDP

异常向量表

__Vectors       DCD     __initial_sp                   ; Top of Stack

                DCD     Reset_Handler                  ; Reset Handler

                DCD     NMI_Handler                    ; NMI Handler

                DCD     HardFault_Handler              ; Hard Fault Handler

。。。。

。。。。

。。。。

                DCD     USART1_IRQHandler              ; USART1

                DCD     USART2_IRQHandler              ; USART2

                DCD     0                              ; Reserved

                DCD     CEC_IRQHandler                 ; CEC



__Vectors_End

以上的表可以理解为一个unsigned int 型的数组, 每个元素是个函数地址, 在reset 之后,该表 __Vectors 被映射到 0地址

查看芯片手册, 如下就是异常向量表, 如reset 之后执行的是0x0000 0004地址,

那就会执行到 __Vectors表里的Reset_Handler,其他也一样

 

定时器

tim6(基本定时器) 实现2秒的定时

勾选中断

 

HAL库手册:

HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef * htim)

函数功能:以中断方式启动定时器htim

void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim)

函数功能: 以中断方式启动的定时器, 定时器到了后的回调函数

滴答定时器 ,HAL_Delay

滴答定时器------>1ms 定时器

向量表:

 DCD     SysTick_Handler

void HAL_IncTick(void)

{

  uwTick++;------------------ 全局变量

}
__weak void HAL_Delay(__IO uint32_t Delay)

{

  uint32_t tickstart = HAL_GetTick();

  uint32_t wait = Delay;

  

  while((HAL_GetTick() - tickstart) < wait)   不断获取滴答数,进行比较

  {

  }

}

独立看门狗

独立看门狗的周期 10秒钟, 看门狗的时钟源是lsi-----40khz

 

HAL库手册:

HAL_StatusTypeDef HAL_IWDG_Init (IWDG_HandleTypeDef *hiwdg)

函数功能: 初始化并且启动看门狗

HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef * hiwdg)

函数功能: 喂狗

DMA

直接内存存取总线, 在硬件接口的寄存器 和  内存之间建立一条通道

实验: uart1 dma的方式接收电脑发过来的数据

HAL 库手册:

HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)

函数功能: 从huart 接收Size 个字节, 保存到pData

spi--lcd

spi 串行,同步, 全双工

四根线:

时钟线  clk

片选线  cs

主出从入 mosi

主入从出 miso

 

LCD ----------- 液晶屏背光线---------------- PB6

MISO --------------- 输出口, 通过高低电平告诉lcd 驱动ic , spi通讯的数据是命令还是数据?----------------------------------------------PB4

MOSI ----------- SPI 的输出----------------- PB5

SCLK --------- SPI 的时钟 ------------------ PB3

SS ----------- SPI 的片选线----------------PA15

HAL 库 手册:

HAL_StatusTypeDef HAL_SPI_Transmit (SPI_HandleTypeDef *hspi, uint8_t * pData, uint16_t Size, uint32_t Timeout)

函数功能: 依赖spi接口 hspi, 发送Size个字节, 数据在pData, 发送超时是Timeout

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值