新建工程模板和GPIO工作原理
新建工程模板:寄存器版本
一般步骤:①新建工程目录,复制需要的文件到工程目录
② 把工程需要的文件添加到工程
③在MDK中设置把头文件存放路径
④配置MDK:全局宏定义等
⑤编写用户函数
⑥添加ALIENTEK系统文件夹SYSTEM
新建工程模板: HAL库版本
固件库就是函数的集合(API),把寄存器操作封装起来。
步骤:①复制所需要文件到工程包中。
② 把工程文件引入工程中。
③ 设置头文件包含路径
④ MDK设置(全局宏定义,编译文件存放路径等)
⑤ 编写用户程序
⑥添加ALIENTEK系统文件夹SYSTEM
⑦修改相关文件参数适配开发板
GPIO工作原理
参考资料《STM32FXX开发指南-库函数版本》-第六章 跑马灯实验/《STM32F4xx中文参考手册》-第7章通用IO
\7,硬件资料\2,芯片资料\STM32F429IGT6.pdf
GPIO简介
GPIO全称general purpose intput output ,通用输入输出端口。 可以做输入也可以做输出。GPIO端口可通过程序配置成输入或者输出。
STM32的引脚中,有部分是做GPIO使用,部分是电源引脚/复位引脚/启动模式引脚/晶振引脚/调试下载引脚。
对于STM32FXXXIGT6来说, 一共有9组IO: PAPI,其中PAPH 每组16个IO,PI只有PI0~PI11。所以一共有140个IO口:16*8+12=140。
STM32的大部分引脚除了当GPIO使用外,还可以复用为外设功能引脚(比如串口)。一个引脚,可以作为IO口,同时也可以作为复用功能外设引脚。
GPIO工作模式
4种输入模式:输入浮空,输入上拉,输入下拉,模拟输入。
4种输出模式(带上下拉):开漏输出,开漏复用功能,推挽式输出,推挽式复用功能。
4中最大输出速度:2MHz,25MHz,50MHz,100MHz。
推挽输出:可以输出强高低电平,连接数字器件。
开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行。 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)
上电复位后,GPIO默认为输入浮空状态,部分特殊功能引脚为特定状态。复位后,调试引脚处于复用功能上拉/下拉状态:
PA15:JTDI处于上拉状态
PA14:JTCK/SWCLK处于下拉状态
PA13:JTMS/SWDAT处于下拉状态
PB4:NJTRST处于上拉状态
PB3:JTDO处于浮空状态
GPIO寄存器
每组IO口由10个寄存器组成 ,如果芯片有GPIOA~GPIOI 9个组,那么一共有对应9X10=90个寄存器。
每组GPIO端口的寄存器包括:
一个端口模式寄存器(GPIOx_MODER) 16组32位,4种工作模式。
一个端口输出类型寄存器(GPIOx_OTYPER) 低16位共32位,2种工作模式
一个端口输出速度寄存器(GPIOx_OSPEEDR) 16组32位 4种模式
一个端口上拉下拉寄存器(GPIOx_PUPDR) 16组32位 4种模式
一个端口输入数据寄存器(GPIOx_IDR)低16位共32位,IDR->PA
一个端口输出数据寄存器(GPIOx_ODR) 低16位共32位,RW->PA
一个端口置位/复位寄存器(GPIOx_BSRR) 低16位(置为),高16位(复位)
一个端口配置锁存寄存器(GPIOx_LCKR) 17位共32位 0-16端口锁定键,位17LCKK锁定键
两个复用功能寄存器(低位GPIOx_AFRL & GPIOx_AFRH)