一、硬件连接
LED0 | PA8 |
---|---|
LED1 | PD2 |
选择GPIO输出方式:
推挽输出:可以输出强高低电平
二、库函数介绍
组介绍
1.组 USER 下面存放的主要是用户代码。 system_stm32f10x.c 里面主要是系统时钟初始化函数 SystemInit 相关的定义,一般情况下文件用户不需要修改。 stm32f10x_it.c 里面存放的是部分中断服务函数。 main.c函数主要存放的是主函数。
2.组 HARDWARE 下面存放的是每个实验的外设驱动代码,他的实现是通过调用 FWLib下面的固件库文件实现的,比如 led.c 里面调用stm32f10x_gpio.c 里面的函数对 led 进行初始化,这里面的函数是讲解的重点。后面的实验中可以看到会引入多个源文件。
3.组 SYSTEM 是 ALIENTEK 提供的共用代码, 包含 Systick 延时函数, IO 口位带操作以及串口相关函数。
4.组 CORE 下面存放的是固件库必须的核心文件和启动文件。这里面的文件用户不需要修改。
5.组 FWLib 下面存放的是 ST 官方提供的外设驱动固件库文件,这些文件大家可以根据工程需要来添加和删除。每个 stm32f10x_ppp.c 源文件对应一个 stm32f10x_ppp.h 头文件。
代码层次:
IO口相关库函数文件介绍(组FWILIB)
源文件 | 头文件 |
---|---|
stm32f10x_gpio.c | stm32f10x_gpio.h |
misc.c | misc.h |
stm32f10x_rcc.c | stm32f10x_rcc.h |
GPIO重要库函数介绍
一个初始化函数 | void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); |
---|---|
两个读取输入电平函数 | uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); |
四个设置输出电平函数 | void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)(BSRR); void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)(BRR);void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); |
初始化函数void GPIO_Init
两个入口参数指针
GPIO_TypeDef*GPIOx
包含结构体
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
第一个输入参数GPIOx是用来指定 GPIO(范围从GPIOA-GPIOG)
GPIO_InitTypeDef*GPIO_InitStruct:
包含结构体
typedef struct
{
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOMode_TypeDef GPIO_Mode;