#include "stm32f10x_lib.h"
GPIO_InitTypeDef GPIO_InitStructure;//声明GPIO_InitStructure
void LED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //开GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2 | GPIO_Pin_3 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // 设定输出速率2MHZHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIOE
}
void Delay(u32 nCount) //延时函数
{
for(; nCount != 0; nCount--);
}
int main(void)
{
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_1);//set GPIOE.1=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_1);//set GPIOE.1=1
//Delay(0x4ffff);
GPIO_ResetBits(GPIOE, GPIO_Pin_0);//set GPIOE.0=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_0);//set GPIOE.0=1
//Delay(0x4ffff);
GPIO_ResetBits(GPIOE, GPIO_Pin_2);//set GPIOE.2=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_2);//set GPIOE.2=1
//Delay(0x4ffff);
GPIO_ResetBits(GPIOE, GPIO_Pin_3);//set GPIOE.3=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_3);//set GPIOE.3=1
//Delay(0x4ffff);
}
}
STM32 的GPIO流水灯,程序下进去后,4个LED先全部都亮,然后才逐个点亮;我不太明白,怎么开始会全部都亮
答案:2 悬赏:50 手机版
解决时间 2021-12-18 21:34
- 提问者网友:不爱我么
- 2021-12-18 05:27
最佳答案
- 五星知识达人网友:一把行者刀
- 2022-01-22 05:30
(仅供参考)由于你设置推挽输出,也就是说没有上下拉(8中模式里输入有上下拉),在《数据手册》里的解释推挽输出初始化时,输出0或1,其实是0,这样的话,你的开始红灯都全部亮下,就不难理解了。所以你若想在开始的时候不想让他都亮(按照你的思路走),你可以对你的几个引脚进行拉高,即对ODR或者BSRR进行操作即可。
GPIO_SetBits(GPIOE, GPIO_Pin_1);//Init函数把几个脚都添加进去即可
GPIO_SetBits(GPIOE, GPIO_Pin_1);//Init函数把几个脚都添加进去即可
全部回答
- 1楼网友:玩世
- 2022-01-22 06:07
如果你led一边接地,一边接gpio。这样就可以关闭led灯
gpio_resetbits就是将对应的gpio位输出0,两边电压差为0时就关闭led灯了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯