STM32流水灯实验编程

发布者:星光小狐狸最新更新时间:2021-04-16 来源: eefocus关键字:STM32  流水灯实验  编程 手机看文章 扫描二维码
随时随地手机看文章

首先,在上一节的模板基础上建立一个新的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函数中就需要调用了。好了,我们看一下运行的效果怎么样:



关键字:STM32  流水灯实验  编程 引用地址:STM32流水灯实验编程

上一篇:STM32外部中断程序
下一篇:基于STM32单片机,FLASh先擦后写的函数分析案例

推荐阅读最新更新时间:2024-11-11 19:19

51单片机驱动步进电机电路及汇编程
  在这里介绍一下用51单片机驱动步进电机的方法。   这款步进电机的驱动电压12V,步进角为 7.5度 . 一圈 360 度 , 需要 48 个脉冲完成!!!   该步进电机有6根引线,排列次序如下:1:红色、2:红色、3:橙色、4:棕色、5: $、6:黑色。   采用51驱动ULN2003的方法进行驱动。   ULN2003的驱动直接用单片机系统的5V电压,可能力矩不是很大,大家可自行加大驱动电压到12V。   ;******************************************************************   ;****************************步
[单片机]
51单片机驱动步进电机电路及汇<font color='red'>编程</font>序
STM32中的看门狗
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) 。 简单来说,看门狗就是在不停地对我们正在运行的程序进行监视,我们必须在规定的时间的有效的时间内去进行“喂狗”操作,这样看门狗就知道我们的程序正在正常的运行,如果我们程序由于外界原因跑飞了,那么就无法进行喂狗操作,那么看门狗由于饥饿难耐,他就会使我们的单片机进行复位,以便让程序重
[单片机]
s3c2440裸机-内存控制器4-SDRAM编程实现
配置内存控制器-SDRAM编程配置 2440内存控制器共有13个寄存器。 BANK0--BANK5只需要设置BWSCON和BANKCONx(x为0~5)两个寄存器; BANK6、BANK7外接SDRAM时,除BWSCON和BANKCONx(x为6、7)外,还要设置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4个寄存器。 下面分别说明各个寄存起的设置: 1.位宽和等待控制寄存器BWSCON(BUSWIDTH&WAITCONTROLREGISTER) 我们SDRAM的位宽为32,DW6 设置成10, 没有使用等待信号,所以WS6 =0。 bank7跟随bank6的配置, 因此BWSCON寄存器的值为:0x2
[单片机]
STM32 KEIL下的堆栈设置
刚接手STM32时,你只编写一个 int main() { while(1); } BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-data=1632 编译后,就会发现这么个程序已用了1600多的RAM,要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了,分析map,你会发现是堆和栈占用的 在startup_stm32f10x_md.s文件中,它的前面几行就有以上定义,这下该明白了吧。 Stack_Size EQU 0x00000400 Heap_Size EQU 0x00000200 顺便记号,关注
[单片机]
STM32通用定时器(TIM2-5)PWM输出
脉冲宽度调制(PWM),是英文 Pulse Width Modulation 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。一般用来控制步进电机的速度等等。STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。 PWM输出模式 STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的( 110 为模式1, 111 为模式2)。模式1和模式2的区别如下: 110:PWM模式1-在
[单片机]
GPIO的描述和配置
首先介绍stm32的GPIO,这是入门的起点,也是最容易上手的部分。 一、GPIO的综合描述 stm32每一个GPIO端口拥有2个32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2个32bits的数据寄存器(GPIOx_IDR,GPIOx_ODR),1个32bits的set/reset寄存器(GPIOx_BSRR),1个16bits的reset寄存器(GPIOx_BRR)和1个32bits的Lock寄存器(GPIOx_LCKR)。 (一)每一个IO引脚都可以使用软件配置为以下几种模式: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入 5. 开漏输出——
[单片机]
STM32基础知识:串口通信-DMA方式
1 DMA概述 直接存储器访问 (DMA) : 用于在外设与存储器之间以及存储器与存储器之间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。 DMA数据传输的四个要素: 传输源 :DMA数据传输的来源 传输目标:DMA数据传输的目的 传输数量:DMA传输数据的数量 触发信号:启动一次DMA数据传输的动作 STM32的DMA控制器特点 每个DMA控制器有8个数据流,每个数据流可以映射到8个通道(或请求); 每一个DMA控制器用于管理一个或多个外设的存储器访问请求,并通过总线仲裁器来协调各个DMA请求的优先级; 数据流(st
[单片机]
<font color='red'>STM32</font>基础知识:串口通信-DMA方式
单片机编程经验总结
经验之一:用“软件陷阱+程序口令”对付PC指针的弹飞 当CPU受到外界干扰,有时PC指针会飞到另一段程序中,或跳到空白段去。其实,如果PC指针飞到空白段去,倒也好处理。只要在空白段设立软件陷阱(拦截指令),将程序拦截到初始化段或程序错误处理段。但是,如果PC指针飞到另一段程序中去了,系统如何办?小匠在这里推荐一种方法——程序口令,思路如下: 1、首先,程序必须模块化。每个模块(子程序)执行一个功能。每个模块只有一个出口(RET)。 2、设立一个模块(子程序)ID寄存器。 3、为每个子程序配置一个唯一的ID号码。 4、每当子程序执行完毕,要返回(RET)之前, 先将本子程序的ID号送入 ID寄存器。 5
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved