查看设备原理图
知识点:
1,电流由电压高的流向电压低的
2,二级管单向导电性
3,串联电路,电流处处相等
4,并联电路,各支路两端的电压相等
5,串联电阻分压,并联电阻分流
关于GPIO输入输出的解释:
https://blog.csdn.net/helaisun/article/details/90738803
得到的信息:
GPIOB5(控制红灯)
GPIOB0(控制绿灯)
GPIOB1(控制红灯)
开始点灯
编程要点
- 使能 GPIO端口时钟;
- 初始化 GPIO目标引脚为推挽输出模式;
- 编写简单测试程序,控制 GPIO引脚输出高、低电平。
1,创建名为led的文件夹,创建如下文件
2,在User下添加bsp_led.c文件
3,在工具哪里把包含bsp_led.c头文件的文件夹包含进去
4,点击编译文件产生编译文件过后的工程文件(这一步不一定对看着来)
5,编写bsp_led.h文件和bsp_led.c(这两个文件互相成就着来写)
bsp_led.h
#ifndef __BSP_LED_H
#define __BSP_LED_H
#include "stm32f10x.h"
#define LED_G_GPIO_PIN GPIO_Pin_0
#define LED_G_GPIO_PORT GPIOB
#define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB
void LED_GPIO_Config(void);
#endif /* __BSP_LED_H */
bsp_led.c
// bsp 板级支持包
# include "bsp_led.h"
void LED_GPIO_Config(void){
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK,ENABLE);
GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LED_G_GPIO_PORT,&GPIO_InitStruct);
}
关于.h的
其中为了方便进行常采用固定的格式防止重复的引用
#ifndef __BSP_LED_H
#define __BSP_LED_H
......
#endif /* __BSP_LED_H */
宏定义名:LED_G_GPIO_PIN
GPIO_Pin_0
是来自stm32f10x.h
下stm32f10x_gpio.h
的宏定义名
#include "stm32f10x.h"
#define LED_G_GPIO_PIN GPIO_Pin_0
关于.c的
定义结构体GPIO_InitStruct
GPIO_InitTypeDef GPIO_InitStruct;
使能 GPIO端口时钟
;
bsp_led.c
RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK,ENABLE);
bsp_led.h
#define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB
初始化 GPIO目标引脚为推挽输出模式
bsp_led.c
GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LED_G_GPIO_PORT,&GPIO_InitStruct);
bsp_led.h
#define LED_G_GPIO_PIN GPIO_Pin_0
编写简单测试程序,控制 GPIO引脚输出高、低电平
main.c
#include "stm32f10x.h"
#include "bsp_led.h"
void Delay(uint32_t count){
for(;count!=0;count--);
}
int main(void){
LED_GPIO_Config();
while(1){
GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
Delay(0xffffff);
GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
Delay(0xffffff);
}
}