stm32

stm32学习笔记


一、工程文件的建立

1.1 全局变量的定义 STM32F10X_HD,USE_STDPERIPH_DRIVER

1.2 目录结构

文件夹 文件 作用
USER main.c 主程序
stm32f10x_it.c 定义部分中断服务程序
system_stm32f10x.c 主要定义SystemIinit等时钟初始化函数
HARDWARE 驱动文件
SYSTEM 常用公共代码
CORE core_cm3.c 固件库核心文件
startup_stm32f10x_hd.s 启动文件
FWLIB 库文件

 


二、跑马灯实验

2.1 GPIO固件库

stm32f10x_gpio.h stm32f10x_gpio.c

2.2 IO配置的8种模式

  • 输入浮空

  • 输入上拉

  • 输入下拉

  • 模拟输入

  • 开漏输出

只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)

  • 推挽输出

可以输出强高低电平,连接数字器件

  • 推挽式复用功能

  • 开漏复用功能

2.3 每个IO端口(16)由七个寄存器控制

  • 配置模式的 2 个 32 位的端口配置寄存器 CRLCRH

  • 2 个 32 位的数据寄存器 IDRODR

  • 1 个 32 位的置位/复位寄存器 BSRR

  • 1个 16 位的清除寄存器 BRR

  • 1 个 32 位的锁存寄存器 LCKR

2.4 GPIO库常用函数介绍

GPIOx: GPIOA~GPIOG
typedef struct
{
    uint16_t GPIO_Pin;            //指定要初始化的IO口         
    GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度
    GPIOMode_TypeDef GPIO_Mode;   //设置工作模式:8种中的一个
}GPIO_InitTypeDef;

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

作用:初始化一个或者多个IO口(同一组)的工作方式和速度

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)

作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。(一个读1位 / 一个读16位)

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)

作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。(一个读1位 / 一个读16位)

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。

2.5 跑马灯端口初始化例程

void LED_Init(void)
{  
    GPIO_InitTypeDef GPIO_InitStructure;      

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOE, ENABLE);                    //使能 PB,PE 端口时钟

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                     //LED0-->PB.5 推挽输出
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(GPIOB, &GPIO_InitStructure);                             //PB.5 输出高
    GPIO_SetBits(GPIOB,GPIO_Pin_5);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                        //LED1-->PE.5 推挽输出
    GPIO_Init(GPIOE, &GPIO_InitStructure);     
    GPIO_SetBits(GPIOE,GPIO_Pin_5);                                            //PE.5 输出高
}

2.6 寄存器地址名称映射

  • 定义外设基地址,以此为基础,不断偏移以定位寄存器组GPIO_TypeDef

 


posted @ 2022-03-08 15:41  ECHOOOH  阅读(653)  评论(0编辑  收藏  举报