Skip to content

Latest commit

 

History

History
77 lines (72 loc) · 5.23 KB

README.md

File metadata and controls

77 lines (72 loc) · 5.23 KB

蓝桥杯


  1. 初始化
  • startup_xx.s是启动汇编源文件,上电的时候先执行此文件,从而建立起C语言的运行环境。初始化堆栈指针SP,初始化程序计数器指针PC,设置堆栈的大小,初始化中断向量表,(若开发板上有外部SRAM)配置外部SRAM作为数据存储器。++调用SystemInit()函数配置STM32系统时钟++,设置C库的分支入口——main,最终调用main函数。
文件名 功能
stm32f10x.h 寄存器映射头文件
startup_stm32f10x_md.s 启动汇编,初始化堆栈,C语言入口
stm32f10x_it.c 中断
system_stm32f10x.c 包含SystemInit函数
  1. DMA
  • Direct Memory Acess
  • MPU响应DMA时不经过MCU,直接从内存读取数据进行进行交换。
  • 在DMA模式下,MCU只需向DMA下达指令,让DMA控制器来处理数据的传送,数据传输完毕再把信息反馈给MCU,这样就减轻了对MCU资源的占有率,节省系统资源。
  • 中断请求是事件向MCU发送一个请求,既要求MCU停止目前的工作而去执行中断子程序。从而可以输入或者输出一个数据,弹中断完毕后,MCU又返回执行它原来的程序。
  • 用中断方式节省了MCU时间,是管理I/O的一个有效的方法,适用于随机出现的服务。但是每处理一次I/O操作都要中断一次,消耗一定的MCU时间,对于高速的外围设备以及成组交换的数据的情况,使用DMA比较的合适。而DMA是一种完全由硬件执行I/O交换的工作方式。既考虑了中断响应,又节约了中断开销。传输速率很高.
  1. 锁相环PLL(PhaseLockLoop)
  • 用来统一整合时钟 ++脉冲讯号++,使高频器件正常工作,PLL是振荡器中的反馈技术,使时钟倍频,稳定。
  • 锁相环的特点:利用外部输入信号的参考信号控制环路内部振荡信号的频率和相位,可以实现输出信号频率对输入信号的频率的自动跟踪,常用于闭环跟踪电路。PLL
  1. 位带操作
  • 可以对单独的bit位进行读写,类似51可位寻址。位带区把每一位膨胀为32位,通过操作膨胀出来的字可以达到操作位带区的每一位。(++用32位来映射1位++)。
  • 公式如下。0X42000000是位带别名区的起始地址,0X40000000是外设位带区的起始地址A-40000000表示该比特前有多少个字节,x8表示一个字节有8位,一位膨胀为4个字节(4个地址),n为bit在A地址中的序号(偏移量offset)一位膨胀为4个字节所以x4。
$$AliasAddr=0X42000000+(A-40000000)*8*4+n*4$$
  1. RTC
  • RTC是一个32位定时器,只能向上计数,时钟源HSE/128,LSE,LSI。
  • CE117E板子上无外部低速晶振(LSE),这里使用内部低速振荡器(LSI),然后开启APB1的时钟。
  • RTC启动步骤:
使用RCC_APB1PeriphClockCmd使能PWR和BKP区域(即备份域)的时钟系统
使能LSI(RCC_CSR->LSION)
选择时钟源(RCC_BDCR->RTCSEL)
使能RTC时钟(RCC_BDCR->RTCEN)
允许对BKP区域的访问PWR_BackupAccessCmd(PWR_CR->DBP)
使用库函数RTC_WaitForSynchro对备份域和APB进行同步
使用RTC_ITConfig使能秒中断
使用RTC_SetPrescaler分频配置把RTC时钟频率设置成1Hz
  • RTC中断:RTC中断有秒中断和闹钟中断,公用一个中断入口,需要在中断函数中判断是哪种中断并且清除相应的中断标志位。
  1. sysTick
  • sysTick是ARM内核的一部分,属于内核的外设,常用来作为操作系统的心跳(系统时基)(切换时间片)。sysTick定时器捆绑在NVIC(嵌套向量中断控制器(Nested Vectored Interrupt Controller))中,可以选择内部和外部时钟源。
  • 相关的寄存器定义和库函数存在于core_x.h中。
  • 相关寄存器
CTRL控制及状态寄存器
位段 名称 描述
16 CONTFLA 是否减到0
2 CLKCOURCE 0外部时钟源(STCLK = HCLK/8)1自由时钟源(FCLK = HCK)
1 TICKINT 1使能异常请求
0 ENABLE sysTick使能
LOAD重装载值寄存器
位段 名称 描述
23:0 RELOAD sysTick定时器重装值,自动重装
VAL当前数值寄存器
位段 名称 描述
23:0 CURRENT 当前值
CALIB校准数值寄存器
位段 名称 描述
23:0 TENMS 10ms内倒计时的格数,由外部提供基准。通常把该值装到RELOAD。
  • tick(滴答声)sysTick系统定时器是一个24bit的递减定时器,在允许中断和使能的情况下减到0触发中断。
  • SCB(System contorl block)属于,内核中。
  • SCB->SHP[12](SHPRx(x = 1,2,3)寄存器为32位寄存器,但是只能字节寻址所以core_x.h定义的SCB结构体将SHP分成了12组,即SHP[12])控制系统控制的优先级。
  • 内核优先级用SCB->SHP[12]来控制,其他用NVIC->IP来控制。数越大优先级越低。
  • 编程要点
    1. 设置重载寄存器值 2. 清除当前数值寄存器的值 3. 配置控制与状态寄存器