STM32指示灯
STLINK插在电脑上,STM32的PWR指示灯是电源灯,会一直亮,另一个连接在PC13口的灯默认是闪烁状态,这是芯片里的一个测试程序。
Kile5配置调试器
1.点击main上面的魔术棒按钮
2.点击Debug,找到Debug下面的Use,默认调试是ULINK改为ST-Link Debugger,然后再点击右边的Settings设置按钮
3.点击上面的Flash Download,选中下面的Reset and Run ,选中之后我们下载程序后会立马复位并执行。
下载程序的按钮
点击LOAD下载程序
下载之后,PC13口的指示灯就不会闪烁了,因为目前没有程序,所以不会闪烁。
配置寄存器
配置3个寄存器
1.RCC寄存器
RCC->APB2ENR = 0x00000010;作用:打开GPIOC端口的时钟。
RCC:Reset and Clock Control(复位和时钟控制)模块的寄存器基地址。APB2ENR:APB2外设时钟使能寄存器
IOPCEN:IO端口C时钟使能(I/O port C clock enable)
由软件置’1’或清’0’
0:IO端口C时钟关闭;
1:IO端口C时钟开启。
2.配置PC13口的模式
GPIOC->CRH = 0x00300000;作用:配置GPIOC的某个引脚为推挽输出模式,速度为50MHz。
GPIOC:GPIOC端口的寄存器基地址。CRH:端口配置高寄存器(Configuration Register High),负责配置引脚8~15的模式和速度。0x00300000:二进制是0000 0000 0011 0000 0000 0000 0000 0000,它的有效位在bit20~bit23。
0x00300000对应到bit20~23就是0011:
在CRH寄存器中,每4个bit控制一个引脚:
bit20~bit23 控制的是GPIOC的引脚13(PC13)
4个bit被分成两部分:
低2位(bit20~21)配置输出模式,
00表示输入,01表示输出(10/50MHz),10或11也表示输出但速度不同。高2位(bit22~23)配置输出类型,
00表示推挽输出,01表示开漏输出,10表示复用功能推挽,11表示复用功能开漏。
低2位是 11 →50MHz输出模式
高2位是
00→通用推挽输出
端口输出数据寄存器
//0x00000000为低电平0V //PC13口是低电平点亮,全为0就是亮的,否则不亮 GPIOC->ODR = 0x00002000; //让 GPIOC 的第 13 号引脚(PC13)输出高电平(3.3V)在 ODR(输出数据寄存器)中,每一位控制对应引脚的输出电平:
写
1→ 该引脚输出高电平(3.3V)写
0→ 该引脚输出低电平(0V)
库函数
GPIOC外设
RCC_APB2PeriphClocKCmd(RCC_APB2Periph_GPIOC, ENABLE); //GPIOC的外设配置端口模式
配置模式和频率
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); //配置模式和频率高低电平
GPIO_SetBits(GPIOC, GPIO_Pin_13); //PC13高电平(3.3V) //GPIO_ResetBits(GPIOC, GPIO_Pin_13); //PC13低电平0V启动文件的分类
GPIO简介
可配置为8种输入输出模式
引脚电平:0V~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
GPIO基本结构
内核通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能。
寄存器写1对应的引脚输出高电平,0就是低电平。
驱动器负责增大驱动能力。
GPIO模式
通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式
模式名称 | 性质 | 特征 |
浮空输入 | 数字输入 | 可读取引脚电平,若引脚悬空,则电平不确定 |
上拉输入 | 数字输入 | 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平 |
下拉输入 | 数字输入 | 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平 |
模拟输入 | 模拟输入 | GPIO无效,引脚直接接入内部ADC |
开漏输出 | 数字输出 | 可输出引脚电平,高电平为高阻态,低电平接VSS |
推挽输出 | 数字输出 | 可输出引脚电平,高电平接VDD,低电平接VSS |
复用开漏输出 | 数字输出 | 由片上外设控制,高电平为高阻态,低电平接VSS |
复用推挽输出 | 数字输出 | 由片上外设控制,高电平接VDD,低电平接VSS |
GPIO_Mode_AIN //模拟输入
GPIO_Mode_IN_FLOATING //浮空输入
GPIO_Mode_IPD //下拉输入
GPIO_Mode_IPU //上拉输入
GPIO_Mode_Out_OD //开漏输出
GPIO_Mode_Out_PP //推挽输出
GPIO_Mode_AF_OD //复用开漏输出
GPIO_Mode_AF_PP //复用推挽输出
点灯是推挽输出
GPIO四个输出函数
1.GPIO_SetBits(GPIOx, GPIO_Pin):可以把指定的端口设置为高电平。
2.GPIO_ResetBits(GPIOx, GPIO_Pin):可以把指定的端口设置为低电平。
3.GPIO_WriteBit(GPIOx, GPIO_Pin, Bit_RESET/Bit_SET):根据第三个参数来设置指定的端口,
Bit_RESET是清除端口值置低电平,Bit_SET是设置端口值置高电平。
4.GPIO_Write(GPIOx, PortVal):可以对16个端口进行写入操作。