刚到公司实习,要学习STM32开发,BOSS给了一块战舰开发板,让我自己写一个功能要用在公司的产品上。难啊。。。以前根本没接触过STM32,只能一步一步慢慢来,利用晚上利用周末恶补一下。哎,算是为了大学前两年还债吧。
一~跑马灯实验(GPIO输出)
实验环境:keil4
实验平台:战舰STM32开发板
GPIO口的高低电平控制是STM32最简单的外设控制。STM32的I/O口共有八种配置模式,四种输入,四种输出,分别是浮空输入,上拉输入,下拉输入,模拟输入,开漏输出,推挽输出,推挽式复用功能,开漏复用功能。其中常用的有,浮空输入,上/下拉输入,推挽输出(串口),复用输出。
要配置GPIO口必须用到GPIO初始化函数void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef*GPIO_InitStruct),这里有两个参数,第一个用来指示GPIO范围,第二个为结构体指针,结构体类型为GPIO_InitTypeDef。其中配置内容有三个,GPIO_InitStructure.GPIO_Pin(引脚号),GPIO_InitStructure.GPIO_Mode(输入输出模式)GPIO_InitStructure.GPIO_Speed(输出速度,只有10MHz,2MHz,50MHz三种),到此关于GPIO的初始化算是完成。
但是,在初始化GPIO之前必须先通过RCC_APB2PPeriphClockCmd()函数使能I/O口时钟。
使用格式为RCC_APB2PPeriphClockCmd(GPIOX,ENABLE)。
最后GPIO口输出是通过函数GPIO_SetBits()和GPIO_ResetBits()两个函数控制的。例如要将GPIOA的引脚5设置为高电平:
GPIO_SetBits(GPIOA,GPIO_Pin_5);
将其设为低电平的方法:
GPIO_ResetBits(GPIOA,GPIO_Pin_5);
I/O操作的具体步骤为:
1.使能I/O口时钟,调用RCC_APB2PPeriphClockCmd()函数
2.初始化I/O参数,调用GPIO_Init()函数
3.操作I/O口
附上一份文件源码:
注:源码当中mian.c中操作GPIO用的是位操作的办法,初学者不建议
用。附上较为简易的库函数操作语句如下:
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);