糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 洋桃开发板笔记(一) 最基本的GPIO接口控制

洋桃开发板笔记(一) 最基本的GPIO接口控制

时间:2024-01-23 16:22:30

相关推荐

洋桃开发板笔记(一)  最基本的GPIO接口控制

点亮LED灯,本质是对GPIO口的控制

_ 杜洋工作室 _

_ 洋桃电子 /YT _

在此声明一下所有代码均为__杜洋工作室__的不允许复制,转发等,本人只是在此程序上进行理解和注释。

【变量定义】

u32 a; //定义32位无符号变量a

u16 a; //定义16位无符号变量a

u8 a; //定义8位无符号变量a

vu32 a; //定义易变的32位无符号变量a

vu16 a; //定义易变的 16位无符号变量a

vu8 a; //定义易变的 8位无符号变量a

uc32 a; //定义只读的32位无符号变量a

uc16 a; //定义只读 的16位无符号变量a

uc8 a; //定义只读 的8位无符号变量a

delay_us(1); //延时1微秒

delay_ms(1); //延时1毫秒

delay_s(1); //延时1秒

#include "stm32f10x.h" //STM32头文件#include "sys.h" //这个为杜洋编写的#include "delay.h"#include "led.h"int main (void){//主程序RCC_Configuration(); //时钟设置LED_Init();while(1){//方法1:采用枚举(BitAction)(1)GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1delay_ms(500); //延时0.5秒GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0delay_ms(500); //延时0.5秒// 方法2:取IO口当前状态,来动作//GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //取反LED1//delay_ms(1000); //延时1秒// 方法3:直接设置IO口//GPIO_SetBits(LEDPORT,LED1); //LED灯都为高电平(1)//delay_s(1); //延时1秒//GPIO_ResetBits(LEDPORT,LED1); //LED灯都为低电平(0)//delay_s(1); //延时1秒//方法4:对_ IO 组_ 的数值写入//GPIO_Write(LEDPORT,0x0001); //直接数值操作将变量值写入LED//delay_s(2); //延时1秒//GPIO_Write(LEDPORT,0x0000); //直接数值操作将变量值写入LED//delay_s(2); //延时1秒}}

以下是LED的宏定义文件,并且下面程序需要自己编写有各种方法。

#ifndef __LED_H #define __LED_H #include "sys.h"//#define LED1 PBout(0)// PB0 也可以直接用这 <-容易理解//#define LED2 PBout(1)// PB1#define LEDPORTGPIOB//定义IO接口 <- 优点是移植方便 ,越到后面越需要这样编译#define LED1GPIO_Pin_0//定义IO接口#define LED2GPIO_Pin_1//定义IO接口void LED_Init(void);//LED的初始化函数声明 ,就不用再从.c程序中声明#endif

我们接下来就是LED的c程序编写

选择IO接口工作方式:

GPIO_Mode_AIN 模拟输入

GPIO_Mode_IN_FLOATING 浮空输入

GPIO_Mode_IPD 下拉输入

GPIO_Mode_IPU 上 拉输入

GPIO_Mode_Out_PP 推挽输出

GPIO_Mode_Out_OD 开漏输出

GPIO_Mode_AF_PP 复用推挽输出

GPIO_Mode_AF_OD 复用开漏输出

#include "led.h" //导入自己编写的 led.h的头文件,里面有许多自己宏定义的成员(变量)和函数void LED_Init(void){ //LED灯的接口初始化GPIO_InitTypeDef GPIO_InitStructure;//接口的结构定义 GPIO_InitStructure <-特殊的成员RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//打开相应的IO口的时钟GPIO_InitStructure.GPIO_Pin = LED1 | LED2; //选择端口号(0~15或all) GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz) GPIO_Init(LEDPORT, &GPIO_InitStructure);}

APB2外设时钟使能,(ARM与C51单片机不同的是,不用外设的时候,如IO口、ADC、定时器等等,都是禁止时钟的,以达到节能的目的,只有要用到的外设,才开启它的时钟。)即调用void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);函数,此函数是在stm32f10x_rcc.c文件中定义的。其中第一个参数指要打开哪一组GPIO的时钟,取值参见stm32f10x_rcc.h文件中的宏定义,第二个参数为打开或关闭使能,取值参见stm32f10x.h文件中的定义,其中ENABLE代表开启使能,DISABLE代表关闭使能。

[参考 : ]

【STM32开发】STM32 GPIO配置:/p/61290597杜洋工作室 洋桃电子 /YT

如果觉得《洋桃开发板笔记(一) 最基本的GPIO接口控制》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。