GPIO功能文件相关操作:
使用GPIO功能前,首先要初始化系统,最简单的方法为:添加stm32f10x_rcc.c,打开stm32f10x_conf.h 在第41行将/* #include "stm32f10x_rcc.h""*/两边注释符去掉,在main函数中添加代码SystemInit();
添加stm32f10x_gpio.c
打开stm32f10x_conf.h 在37行将/*#include "stm32f10x_gpio.h"*/两边注释符去掉
GPIO口使能:
1.定义一个初始化类型结构体变量,我们为这个结构体里的各个变量赋值,
GPIO_InitTypeDef GPIO_InitStructure;
2. 开启GPIO时钟,只有开启了GPIO时钟,对应端口才可以正常工作,GPIO口对应时钟APB2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
3. 为结构体赋值
设置GPIO口为输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //设置引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出,其它选项
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出最大频率,其它选项
设置GPIO口为输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //设置引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//悬空输
附:
GPIO_Mode值
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_Speed值
GPIO_Speed_10MHz 最高输出速率 10MHz
GPIO_Speed_2MHz 最高输出速率 2MHz
GPIO_Speed_50MHz 最高输出速率 50MHz
4. 使能GPIO口
GPIO_Init(GPIOA, &GPIO_InitStructure);
例:
void GPIOA0_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
GPIO使用:
输出状态:
GPIO口置高:GPIO_SetBits(GPIOA,GPIO_Pin_0| GPIO_Pin_1);
GPIO口置底:GPIO_ResetBits(GPIOA,GPIO_Pin_0);
写数据到GPIO的某个引脚:GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);
写数据到GPIO:GPIO_Write(GPIOA, 0x1101);
得到GPIO口状态:GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0);
u16 ReadValue;
ReadValue = GPIO_ReadOutputData(GPIOC);
例:
#define LED0_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_0)
#define LED0_ON GPIO_SetBits(GPIOA,GPIO_Pin_0)
#define LED0 GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0)
int main(void)
{
while(1)
{
delay();
if(LED1)
LED0_OFF;
else LED0_ON;
}
}
输入状态:
得到GPIO口状态:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)
u16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOC);
这是GPIO的基本配置方法
实现走马灯 按照你自己的板子上小灯连接的对应引脚将里面的引脚换下就好了。
温馨提示:内容为网友见解,仅供参考
STM32对GPIO操作一般用库函数,我想知道怎样用位操作实现流水灯?谢谢了...
使用GPIO功能前,首先要初始化系统,最简单的方法为:添加stm32f10x_rcc.c,打开stm32f10x_conf.h 在第41行将\/* #include "stm32f10x_rcc.h""*\/两边注释符去掉,在main函数中添加代码SystemInit();添加stm32f10x_gpio.c 打开stm32f10x_conf.h 在37行将\/*#include "stm32f10x_gpio.h"*\/...
STM32 的GPIO流水灯,程序下进去后,4个LED先全部都亮,然后才逐个点亮;我...
所以你若想在开始的时候不想让他都亮(按照你的思路走),你可以对你的几个引脚进行拉高,即对ODR或者BSRR进行操作即可。GPIO_SetBits(GPIOE, GPIO_Pin_1);\/\/Init函数把几个脚都添加进去即可
用stm32写一个八位流水灯的程序
\/\/工程不管哦亲\/\/默认共阳极\/\/头文件自己写\/\/这是.c文件注意函数声明哦亲void GPIO_Init(void){ RCC->APB2ENR |=1<2; \/\/打开时钟 GPIOA->CRL &=0x00000000; \/\/ GPIOA->CRL |=0x33333333; \/\/推挽输出 GPIOA->ODR |=0xFF<<0; \/\/输出1}void Loop...
想用STM32开发板做个流水灯,从左到右共8个灯,要求是在第二个灯未亮前...
定时器中点亮程序:if(aaa<10){把1号灯点亮};else if(aaa<20){把2号灯点亮};else if(aaa<30){把3号灯点亮};else if(aaa<40){把4号灯点亮};else if(aaa<50){把5号灯点亮};else if(aaa<60){把6号灯点亮};else if(aaa<70){把7号灯点亮};else if(aaa<80){把8...
【GD32F470紫藤派使用手册】第一讲 GPIO-流水灯实验
LCD初始化等操作。LED配置函数用于注册和初始化LED GPIO,允许通过别名进行配置。主函数进行驱动初始化、LED初始化和串口初始化,通过循环翻转LED实现流水灯效果。实验结果验证了代码的正确性,LED1-LED4顺序点亮,完成流水灯功能。此实验由聚沃科技原创,详情可访问GD32MCU技术交流群:859440462。
stm32cubemx 组态怎么实现
在stm32f1xx_hal_gpio.h头文件中可以看到GPIO的操作函数。在main函数中的while循环中添加LED流水灯效果的应用程序。重新编译程序,点击下载到Open103Z-C开发板。如果提示错误,可以点击图标对Option for Target 的Dubug选项进行修改。(图上选的是ST-LINK)点击Settings->Flash Download勾选 Reset and Run...
在校大学生,想用ARM芯片stm32做一个项目,但是不知道可以做什么...希望...
做一个简单的只能避障小车吧。。。先简单的做起,比如实现直线走到,然后测障碍物的距离,并显示出来,然后慢慢加模块,加功能。。。最后最好移植一个ucos系统上去跑。。。这样就能学到东西啦
如何编写STM32控制LED反转C程序
先定义对应LED 的控制端口#define LED PAout(0)然后LED=~LED;
用stm32开发板烧写了一个流水灯程序,完成后一直在运行,怎样关闭?_百...
你用的是官方例程吗?。。。那个是个死循环,你把程序改一下就行了
单片机问题,ARM比如stm32在没有上操作系统前和51区别大吗?
1,STM32的工作频率可以倍频到72M,而C51单片机的频率一般不宜超过24M 2,STM32单片机的RAM和ROM及FLASH存储空间比C51单片机的要大几十倍 3,相比于51单片机,STM32F103系列提供的外设也更加丰富,如CAN接口、USB接口等。综上,如果你只是用于控制一个流水灯,则两者基本没有区别。但是如果用于一些数据...