本帖最后由 e芯凌 于 2019-11-10 22:20 编辑
整体操作思路:
1:使能IO口时钟。配置寄存器RCC_APB2ENR。 2:初始化IO口模式。配置寄存器GPIOx_CRH/CRL。 3:操作IO口,输出高低电平。配置寄存器GPIOX_ODR或者BSRR/BRR。
端口配置低寄存器(GPIOx_CRL) (x=A..E)
位31:30
27:26
23:22
19:18
15:14
11:10
7:6
3:2 | CNFy[1:0]:端口x配置位(y = 0…7) (Port x configuration bits)
软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。
在输入模式(MODE[1:0]=00):
00:模拟输入模式
01:浮空输入模式(复位后的状态)
10:上拉/下拉输入模式
11:保留
在输出模式(MODE[1:0]>00):
00:通用推挽输出模式
01:通用开漏输出模式
10:复用功能推挽输出模式
11:复用功能开漏输出模式 | 位29:28
25:24
21:20
17:16
13:12
9:8, 5:4
1:0 | MODEy[1:0]:端口x的模式位(y = 0…7) (Port x mode bits)
软件通过这些位配置相应的I/O端口,请参考表17端口位配置表。
00:输入模式(复位后的状态)
01:输出模式,最大速度10MHz
10:输出模式,最大速度2MHz
11:输出模式,最大速度50MHz |
APB2 外设时钟使能寄存器(RCC_APB2ENR)
位6 | IOPEEN: IO端口E时钟使能 (I/O port E clock enable)
由软件置’1’或清’0’
0: IO端口E时钟关闭;
1: IO端口E时钟开启。 |
位3 | IOPBEN: IO端口B时钟使能 (I/O port B clock enable)
由软件置’1’或清’0’
0: IO端口B时钟关闭;
1: IO端口B时钟开启。 |
lcd.h代码
- #ifndef __LED_H
- #define __LED_H
- #endif
- void LED_Init(void);
复制代码 main.c代码
- #include "stm32f10x.h"
- #include "delay.h"
- #include "led.h"
- int main()
- {
- delay_init();
- LED_Init();
- while(1)
- {
- GPIOB->ODR|=1<<5;
- GPIOE->ODR|=1<<5;
- delay_ms(500);
- GPIOB->ODR&=~(1<<5);
- GPIOE->ODR&=~(1<<5);
- delay_ms(500);
- }
- }
复制代码 lcd.c代码
- #include "led.h"
- #include "stm32f10x.h"
- void LED_Init(void)
- {
- RCC->APB2ENR|=1<<3;
- RCC->APB2ENR|=1<<6;
- GPIOB->CRL&=0xff0fffff;//CPIOB.5
- GPIOB->CRL|=0x00300000;
- GPIOB->ODR|=1<<5;
- GPIOE->CRL&=0xff0fffff;//GPIOE.6
- GPIOE->CRL|=0x00300000;
- GPIOE->ODR|=1<<5;
- }
复制代码
|