STM32F429开发板学习笔记

本文最后更新于:2022年5月29日 上午

本文是博主在学习野火STM32F429开发板时记录的笔记。

新建工程模板——固件库流程

  

2018-01-28

1-先在本地新建一个文件夹,用于存储固件库文件;

 (Doc、Libraries、Listings、Output、Project、User)

2-在工程里面添加组,然后在里面添加文件;

  (STARUP、CMSIS、STM32F4xx_StdPeriph_Driver、User、Doc)

3-编译,会出现很多错误,打开stm32f4xx.h文件;

4-在工具链中的C/C++选项卡里面指定头文件的目录;

  (把所有的.h文件目录都添加进来)

5-在工具链中的C/C++选项卡里面添加这两个宏:

  USE_STDPERIPH_DRIVER,STM32F429_439xx,

6-把一下文件屏蔽掉,不编译它;

  (stm32f4xx_cec.c,stm32f4xx_dsi.c,stm32f4xx_flash_ramfurc.c,stm32f4xx_fsmc.c,stm32f4xx_qspi.c)

7-修改stm32f4xx_it.c文件;

  (删除:#include “main.h”,TimingDelay_Decrement();)

8-配置仿真器


### GPIO   
1/24/2018
#### GPIO输出初始化顺序

    1-打开GPIO端口的时钟

    2-配置MODER寄存器

    3-确定是推挽输出还是开漏输出(输出类型寄存器:OTYPER)

    4-配置输出速度(输出速度寄存器:OSPEEDR)

    5-内部上拉/下拉电阻要不要开启(上拉/下拉寄存器:PUPDR)

    6-具体要输出的内容(置位复位寄存器:BSRR、数据输出寄存器:ODR)

 

GPIO输入初始化

    1-打开GPIO端口的时钟

    2-选定具体的引脚号

    3-配置为输入(MODER寄存器)

    4-配置为下拉/上拉/浮空([PUPDR寄存器]具体情况而定)


#### 推挽输出

    1.可以输出高低电平,高电平由VDD决定,低电平由VSS决定

    2.两个三极管受两路互补信号控制,一个导通时另一个截止。开关效率高,电流大、驱动能力强。

    3.输出高电平时,电流输出到负载,叫灌电流,可以理解为推;

      输出低电平时,负载电流流向芯片,叫拉电流,即挽。

 

开漏输出

    1.只能输出低电平,不能输出高电平

    2.如果要输出高电平,则需要外接上拉

    3.具有“线与”功能,一个为低,全部为低(多用于I2C和SMBUS总线)

 

施密特触发器

    把信号更准确地分辨出为二进制的1或者0

 (高于阈值电压都为1,;低于阈值电压都为0)

 

typedef指令:

    相当于给一个已有的类型起了一个新的名字,然后可以像使用旧类型名一样使用新类型名来声明变量。

    注意:并没有创建任何新类型,它只是为某个已存在的类型增加一个方便使用的标签。


#### 三原色配色

    红 + 黄 = 橙

    黄 + 蓝 = 绿

    蓝 + 红 = 紫


### 定时器   
2018-03-18
#### 定时器分类 基本定时器、通用定时器、高级定时器
#### 定时器资源 429有2个高级定时器(TIM1和TIM8)、10个通用定时器、2个基本定时器(TIM6和TIM7)
#### 基本定时器(TIM6和TIM7)

    1-计数器16bit,只能向上计数;

    2-没有外部GPIO,式内部资源,只能定时;

    3-时钟来自PCLK1,可实现1~65536分频;


 

影子寄存器

    1-PSC和ARR都有影子寄存器;

    2-起到缓冲的作用,用户值->寄存器->影子寄存器->起作用,

      如果不使用影子寄存器则用户在写到寄存器之后则立刻起作用。

    ARR影子,TIMx_CR1:APRE位控制。


 

定时时间的计算

    1、PSC(分频因子)=9000-1,定时器频率=90M/(PSC+1)=10000HZ,计算一次脉冲的时间=1/10000 s

    2、ARR(自动重载寄存器)=4999,从0计数到4999,则计了5000次

    3、T=5000/10000=0.5S


#### Timer编程要点:

    1-配置时间初始化结构体

    2-开启定时器更新中断

    3-配置中断优先级

    4-使能定时器

    5-编写中断服务函数

    6-编写main函数


### 中断(EXTI)
2018-03-19
#### 中断编程的顺序
  1. 使能中断请求;(跟具体的外设寄存器相关)

  2. 配置中断优先级分组;

    优先级设定:NVIC->IPRx;优先级分组:SCB->AIRCR:PRIGROUP[10:8]

  3. 配置NVIC寄存器,初始化NVIC_InitTypeDef;

  4. 编写中断服务函数,编写在stm32f4xx_it.c.(函数名在启动文件查找)

 

EXTI初始化结构体:(EXTI_InitTypeDef)

  1. EXTI_Line:用于产生 中断/事件 线

  2. EXTI_Mode:EXTI模式(中断/事件)

  3. EXTI_Trigger:触发(上/下/上下 沿)

  4. EXTI_LineCmd:使能或者失能(IMR/EMR)


#### EXTI编程要点(按键检测——中断方式)

    1-初始化要连接到EXTI的GPIO

    2-初始化EXTI用于产生中断/事件

    3-初始化NVIC,用于处理中断

    4-编写中断服务函数

    5-main函数


### SysTick:系统定时器  
2018-03-21
SysTick:系统定时器,24位,只能递减。

唯一的固件库函数:__STATIC_INLINE unit32_t SysTick_Config(uint32_t ticks);

 

编程要点

    1-初始化LED相关的GPIO

    2-配置SysTick(STK_CTRL寄存器)

    3-编写中断服务函数

    4-main函数


### 串口通信  
2018-03-28
波特率 = fplck/8*(2-OVER8)*USARTDIV

波特率寄存器:USART_BRR

USARTDIV:无符号定点数

FPLCK:串口时钟,注区分APB2和APB1两条总线

OVER8:过采样模式(寄存器:USART_CR1)


#### UART编程要点

    1-初始化串口需要用到的GPIO,GPIO_InitTypeDef,

      GPIO_PinAFConfig();

    2-初始化串口,USART_InitTypeDef

    3-中断配置

    4-使能串口

    5-编写发送和接受函数

    6-编写中断服务函数


### DMA(Data Memory Access,直接存储器访问)  
2018-03-30
DMA1:P->M,M->P

DMA2:P->M,M->P,M->M


#### 编程要点

M to M:

    1-在Flash中定义好要传输的数据,在SRAM中定义好用来接收Flash数据的变量

    2-确定使用DMA2,哪个数据流,哪个通道?

    3-初始化DMA(DMA_DeInit()),主要是配置DMA初始化结构体(DMA_InitTypeDef)

    4-使能DMA

    5-编写数据比较函数

    6-编写main函数

M to P:

    1-初始化串口

    2-配置DMA初始化结构体

    3-编写main函数(开启串口发送DMA请求)


### I2C编程要点
2018-03-31
    1-配置通讯使用的目标引脚为开漏模式;

    2-使能I2C外设的时钟;

    3-配置I2C外设的模式、地址、速率等参数并使能I2C外设;

    4-编写基本I2C按字节收发函数;

    5-编写读写EEPROM存储内容的函数;

    6-编写测试程序,对读写数据进行校验。

 

eg.我们的 PCLK1=45MHz,想要配置 400Kbit/s 的速率,计算方式如下:

    PCLK时钟周期: TPCLK1 = 1/45000000

    目标SCL时钟周期: TSCL = 1/400000

    SCL时钟周期内的高电平时间: THIGH = TSCL/3

    (CCR寄存器的DUTY为0:SCL时钟周期内的低电平时间: TLOW = 2*TSCL/3)

    计算CCR的值: CCR = THIGH/TPCLK1 = 37.5


### SPI编程要点
2018-04-08
    1-初始化通讯使用的目标引脚及端口时钟;

    2-使能SPI外设的时钟;

    3-配置SPI外设的模式、地址、速率等参数并使能SPI外设;

    4-编写基本SPI按字节收发的函数;

    5-编写对FLASH擦除及读写操作的函数;

    6-编写main函数     


STM32F429开发板学习笔记
https://kevinloongc.github.io/posts/37488.html
作者
Kevin Loongc
发布于
2019年4月20日
许可协议