历史上的今天
返回首页

历史上的今天

今天是:2025年04月16日(星期三)

正在发生

2021年04月16日 | STM32流水灯实验编程

2021-04-16 来源:eefocus

首先,在上一节的模板基础上建立一个新的Keil工程,取名为LED。打开main.c函数,可以直接在这里写代码,当然也可以重新建立.c文件,这里我们直接在main文件中写程序。第一步,也是最重要的一步就是配置作为输出的IO口,代码如下:


GPIO_InitTypeDef GPIO_Structure; //定义GPIO结构体


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); //使能PEIO口的时钟


GPIO_Structure.GPIO_Pin = GPIO_Pin_9; //结构体引脚为PE9


GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出


GPIO_Structure.GPIO_Speed = GPIO_Speed_50MHz; //IO口翻转速度设置为50MHz


GPIO_Init(GPIOE,&GPIO_Structure); //初始化PE9引脚


这里只设置了一个PE9引脚,其他引脚的设置类似,只需改变GPIO_Pin_x然后初始化即可,如下:


GPIO_Structure.GPIO_Pin = GPIO_Pin_11;


GPIO_Init(GPIOE,&GPIO_Structure);


GPIO_Structure.GPIO_Pin = GPIO_Pin_13;


GPIO_Init(GPIOE,&GPIO_Structure);


GPIO_Structure.GPIO_Pin = GPIO_Pin_15;


GPIO_Init(GPIOE,&GPIO_Structure);


将以上初始化IO口的代码封装成一个函数命名为LED_init():


void Led_init(void)


{


GPIO_InitTypeDef GPIO_Structure; //定义GPIO结构体


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); //使能PEIO口的时钟


GPIO_Structure.GPIO_Pin = GPIO_Pin_9; //结构体引脚为PE9


GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出


GPIO_Structure.GPIO_Speed = GPIO_Speed_50MHz; //IO口翻转速度设置为50MHz


GPIO_Init(GPIOE,&GPIO_Structure); //初始化PE9引脚


GPIO_Structure.GPIO_Pin = GPIO_Pin_11;


GPIO_Init(GPIOE,&GPIO_Structure);


GPIO_Structure.GPIO_Pin = GPIO_Pin_13;


GPIO_Init(GPIOE,&GPIO_Structure);


GPIO_Structure.GPIO_Pin = GPIO_Pin_15;


GPIO_Init(GPIOE,&GPIO_Structure);


}


然后需要一个延时函数,控制LED等亮与灭的时间间隔:


void Delay(int n)


{


while(n--)


; //学过51的人都明白


}


至此,驱动LED的程序代码基本已经完成,为了更方便的调用,我们定义一些宏:


#define LED1_ON() GPIO_SetBits(GPIOE,GPIO_Pin_13) //LED1置位


#define LED1_OFF() GPIO_ResetBits(GPIOE,GPIO_Pin_13) //LED1复位


#define LED2_ON() GPIO_SetBits(GPIOE,GPIO_Pin_9)


#define LED2_OFF() GPIO_ResetBits(GPIOE,GPIO_Pin_9)


#define LED3_ON() GPIO_SetBits(GPIOE,GPIO_Pin_15)


#define LED3_OFF() GPIO_ResetBits(GPIOE,GPIO_Pin_15)


#define LED4_ON() GPIO_SetBits(GPIOE,GPIO_Pin_11)


#define LED4_OFF() GPIO_ResetBits(GPIOE,GPIO_Pin_11)


好了,要LED等怎么闪烁就看你怎么调用这些宏了,实现流水灯的调用如下:


int main()


{


//SystemInit();


Led_init(); //初始化LED等所用的IO口


while(1)


{


LED1_ON();LED2_OFF();LED3_OFF();LED4_OFF();


Delay(0x8ffff);


LED1_OFF();LED2_ON();LED3_OFF();LED4_OFF();


Delay(0x8ffff);


LED1_OFF();LED2_OFF();LED3_ON();LED4_OFF();


Delay(0x8ffff);


LED1_OFF();LED2_OFF();LED3_OFF();LED4_ON();


Delay(0x8ffff);


}


}


对于SystemInit()函数,在启动代码中已经调用过,那么在main函数中无需再调用,如果使用的固件库版本比较低,启动代码中没有调用,那么main函数中就需要调用了。好了,我们看一下运行的效果怎么样:



推荐阅读

史海拾趣

Brite-Led Optoelectronics Inc公司的发展小趣事

面对电子行业的快速变化和不断升级的技术需求,Brite-Led始终保持敏锐的洞察力和创新精神。公司不断投入研发资源,推出新产品和新技术,以满足市场的变化和客户的需求。同时,公司还注重人才培养和引进,建立了一支高素质的研发团队和管理团队。这些措施使得Brite-Led在激烈的市场竞争中始终保持领先地位,实现了持续发展。

以上是关于Brite-Led Optoelectronics Inc公司发展的5个虚构故事,虽然这些故事是基于虚构的,但它们可能反映了Brite-Led Optoelectronics Inc公司在实际发展中可能遇到的一些情况和挑战。

Discrete Semiconductor Industries公司的发展小趣事

“创新动力”是Discrete Semiconductor Industries公司中一家以创新驱动发展的典范。该公司注重研发投入,积极引进和培养科技人才,建立了完善的研发体系。通过不断的技术创新和产品升级,创新动力不断推出具有市场竞争力的新产品。同时,公司还积极探索新的应用领域和市场机会,不断拓展业务范围。这种创新驱动的发展战略使得创新动力在激烈的市场竞争中保持了强劲的发展势头。

Cambridge Electronic Industries Ltd公司的发展小趣事

面对日益严峻的环境问题和社会责任,CEI积极响应可持续发展的号召。公司加大了对环保技术的研发投入,推出了多款节能、环保的电子产品。同时,CEI还关注员工福利和社会公益事业,积极参与社会捐赠和公益活动。展望未来,CEI将继续坚持技术创新和可持续发展战略,为电子行业的繁荣和发展做出更大的贡献。

通过以上五个故事,我们可以看到Cambridge Electronic Industries Ltd公司在电子行业里发展起来的艰辛与辉煌。他们凭借技术创新、市场拓展、品质管理和可持续发展等方面的努力,逐渐成为了电子行业的佼佼者。

A-BRIGHT公司的发展小趣事

随着全球环保意识的提高,A-BRIGHT公司积极响应环保号召,将环保理念融入到产品研发和生产中。公司研发了一系列节能环保的电子产品,不仅满足了客户的需求,也为全球环保事业做出了贡献。这一举措提升了A-BRIGHT的品牌形象,也为其在竞争激烈的市场中赢得了更多客户的青睐。

这些故事虽然是虚构的,但它们基于电子行业的发展趋势和可能情况,展示了A-BRIGHT公司可能的发展路径和成功因素。希望这些故事能够满足您的需求。

Hsuan Mao Technology Co公司的发展小趣事

随着技术创新的成功,A-BRIGHT公司开始积极寻求市场拓展。公司首先瞄准了欧洲市场,通过参加国际电子展会和建立销售网络,成功将产品打入欧洲市场。随后,A-BRIGHT又进军北美市场,通过与当地的大型电子分销商合作,进一步扩大了市场份额。这些市场拓展的成功为A-BRIGHT的快速发展奠定了坚实基础。

ABB公司的发展小趣事

A-BRIGHT公司注重与产业链上下游企业的合作与共赢。公司与多家原材料供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和质量。同时,A-BRIGHT也与多家知名的电子产品制造商展开合作,共同开发新产品,实现了资源共享和互利共赢。

问答坊 | AI 解惑

简易数控直流电源

简易数控直流电源  94年的题, 谁会做啊, 我想了解以下他的原理几过程. 我的邮箱,cf2928@163.com 要不谁告诉我那有我去下也行,谢了.…

查看全部问答>

【分享】mini2440开发板实现国际象棋人机对弈

前段时间买了2440开发板也没怎么搞,惭愧:$ 最近没啥其它事情就好好啃啃吧,哎……没什么基础啊,先欣赏下别人的东西吧 【mini2440开发板实现国际象棋人机对弈 】 我在机子上跑了一下,好像不太能跟电脑对弈啊,不知道哪个地方还有问题 ...…

查看全部问答>

传输线和反射的经典文章

传输线和反射的经典文章…

查看全部问答>

U盘多盘符的问题

我在一个嵌入式系统中,主机在GET MAX LUN我已经返回01,但是主机并未显示2个盘符.仅仅出现了一个盘符 还需要做哪方面的工作…

查看全部问答>

VC如何发彩信,已经实现ATDT*99***1#这一步了,下一步应该是什么,内容打包?如果打包?

VC如何发彩信,已经实现ATDT*99***1#这一步了,下一步应该是什么,内容打包?如果打包? ATE AT+CMGF=0 AT+CIMI   AT+CIMI获得IMSI  IMSI 国际移动用户识别码(IMSI) international mobile subscriber identity 国际上为唯一识别 ...…

查看全部问答>

DM642 编码器初始化

 /*进行SAA7121H的初始化*/ GPIO_RSET(GPVAL,0x0); addrI2C = 0xB8 >>1; /*选择第0路的I2C的地址*/ /*将第0路的视频输入口的数据口设为高阻状态,   使能SCLK,将第27脚设为输入*/ _IIC_write(hSeeddm642i2 ...…

查看全部问答>

2812 flash不能烧写

问题是这样的:我用flash烧写了一个控制电机的程序,不能运行,就把代码改了一下,再进行烧程序的时候就烧不进去啦,我也没有动“lock”和密码(在flash烧写的时候一直很小心的),怎么会锁住呢?很是不解。请EEWORLD老师和各位高手解答一下,谢谢 ...…

查看全部问答>

C题智能小车群

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 109197413  …

查看全部问答>

恳请各位高手指点迷津,替小弟检查一下错误

各位高手,小弟近日在学习关于修改BSP的内容,有一种想法,设置多个引导行,然后在系统启动时按照需要选择相应的引导顺序,然后将config.h中的引导行 #define DEFAULT_BOOT_LINE \\ \"fd=0,0(0,0)host:/fd0/vxWorks.st h=90.0.0.3 e=90.0.0.50 u=ta ...…

查看全部问答>

.一个初中生是如何成为嵌入式工程师的

我是一个只有初中毕业没有读过多少书的人从小就爱好无线电记得很小的时候当通讯兵的父亲带回来几本电子方面的书籍从此就迷上了无线电那种痴迷程度决不亚于现在的小孩迷恋游戏机至今仍然清楚的记得曾经因为装成功一台6管收音机而兴奋的几天几夜没睡 ...…

查看全部问答>