跑马灯实验-STM32F4开发

合集下载

2020年STM32实现跑马灯实验精编版

2020年STM32实现跑马灯实验精编版

6.1 STM32 IO简介本章将要实现的是控制ALIENTEK战舰STM32开发板上的两个LED实现一个类似跑马灯的效果,该实验的关键在于如何控制STM32的IO口输出。

了解了STM32的IO口如何输出的,就可以实现跑马灯了。

通过这一章的学习,你将初步掌握STM32基本IO口的使用,而这是迈向STM32的第一步。

这一章节因为是第一个实验章节,所以我们在这一章将讲解一些知识为后面的实验做铺垫。

为了小节标号与后面实验章节一样,这里我们不另起一节来讲。

在讲解STM32的GPIO之前,首先打开我们光盘的第一个固件库版本实验工程跑马灯实验工程(光盘目录为:“4,程序源码\标准例程-V3.5库函数版本\实验1跑马灯/USER/LED.Uv2”),可以看到我们的实验工程目录:图6.1.1 跑马灯实验目录结构接下来我们逐一讲解一下我们的工程目录下面的组以及重要文件。

①组FWLib下面存放的是ST官方提供的固件库函数,里面的函数我们可以根据需要添加和删除,但是一定要注意在头文件stm32f10x_conf.h文件中注释掉删除的源文件对应的头文件,这里面的文件内容用户不需要修改。

②组CORE下面存放的是固件库必须的核心文件和启动文件。

这里面的文件用户不需要修改。

③组SYSTEM是ALIENTEK提供的共用代码,这些代码的作用和讲解在第五章都有讲解,大家可以翻过去看下。

④组HARDWARE下面存放的是每个实验的外设驱动代码,他的实现是通过调用FWLib下面的固件库文件实现的,比如led.c里面调用stm32f10x_gpio.c里面的函数对led进行初始化,这里面的函数是讲解的重点。

后面的实验中可以看到会引入多个源文件。

⑤组USER下面存放的主要是用户代码。

但是system_stm32f10x.c文件用户不需要修改,同时stm32f10x_it.c里面存放的是中断服务函数,这两个文件的作用在3.1节有讲解,大家可以翻过去看看。

STM32实现跑马灯实验

STM32实现跑马灯实验

6.1 STM32 IO简介本章将要实现的是控制ALIENTEK战舰STM32开发板上的两个LED实现一个类似跑马灯的效果,该实验的关键在于如何控制STM32的IO口输出。

了解了STM32的IO口如何输出的,就可以实现跑马灯了。

通过这一章的学习,你将初步掌握STM32基本IO口的使用,而这是迈向STM32的第一步。

这一章节因为是第一个实验章节,所以我们在这一章将讲解一些知识为后面的实验做铺垫。

为了小节标号与后面实验章节一样,这里我们不另起一节来讲。

在讲解STM32的GPIO之前,首先打开我们光盘的第一个固件库版本实验工程跑马灯实验工程(光盘目录为:“4,程序源码\标准例程-V3.5库函数版本\实验1跑马灯/USER/LED.Uv2”),可以看到我们的实验工程目录:图6.1.1 跑马灯实验目录结构接下来我们逐一讲解一下我们的工程目录下面的组以及重要文件。

①组FWLib下面存放的是ST官方提供的固件库函数,里面的函数我们可以根据需要添加和删除,但是一定要注意在头文件stm32f10x_conf.h文件中注释掉删除的源文件对应的头文件,这里面的文件内容用户不需要修改。

②组CORE下面存放的是固件库必须的核心文件和启动文件。

这里面的文件用户不需要修改。

③组SYSTEM是ALIENTEK提供的共用代码,这些代码的作用和讲解在第五章都有讲解,大家可以翻过去看下。

④组HARDWARE下面存放的是每个实验的外设驱动代码,他的实现是通过调用FWLib下面的固件库文件实现的,比如led.c里面调用stm32f10x_gpio.c里面的函数对led进行初始化,这里面的函数是讲解的重点。

后面的实验中可以看到会引入多个源文件。

⑤组USER下面存放的主要是用户代码。

但是system_stm32f10x.c文件用户不需要修改,同时stm32f10x_it.c里面存放的是中断服务函数,这两个文件的作用在3.1节有讲解,大家可以翻过去看看。

stm32跑马灯实验

stm32跑马灯实验

29:28, 25:24, 21:20, 17:16, 13:12, 9:8, 5:4, 1:0位(MODy)为:端口模式位(y = 8…15) (Port x mode bits) 00:输入模式(复位后的状态) 01:输出模式,最大速度10MHz 10:输出模式,最大速度2MHz 11:输出模式,最大速度50MHz
给个实例,比如我们要设置PORTC的11位为上拉输入,12位为推挽输出。代码如下: GPIOC->CRH&=0XFFF00FFF;//清掉这2个位原来的设置,同时也不影响其他位的设置 GPIOC->CRH|=0X00038000; //PC11输入,PC12输出 GPIOC->ODR=1<<11;//PC11上拉 通过这 3 句话的配置,我们就设置了 PC11 为上拉输入,PC12 为推挽输出。
详见上面端口模式配置表
该寄存器的复位值为0X4444 4444,从上图可以看到,复位值其实就是配置端口为浮空输入模式。从上图还可 以得出:STM32的CRL控制着每个IO端口(A~G)的低8位的模式。每个IO端口的位占用CRL的4个位,高两位为 CNF,低两位为MODE。这里我们可以记住几个常用的配置,比如0X4表示模拟输入模式(ADC用)、0X3表示推 挽输出模式(做输出口用,50M速率)、0X8表示上/下拉输入模式(做输入口用)、0XB表示复用输出(使用IO口 的第二功能,50M速率)。
对于 I2C 接口,假如使用 400k 波特率,若想把余量留大些,那么用 2M 的 GPIO 的引脚速度或许不够,这时可以选 用 10M 的 GPIO 引脚速度。 对于 SPI 接口,假如使用 18M 或 9M 波特率,用 10M 的 GPIO 的引脚速度显然不够了,需要选用 50M 的 GPIO 的引脚 速度。 除此之外,使用端口设置时,有以下几点需要注意: GPIO 口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。 在复位期间和刚复位后,复用功能未开启,I/O 端口被配置成浮空输入模式。 所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。 GPIO 口的配置具有上锁功能,当配置好 GPIO 口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。

跑马灯实验报告

跑马灯实验报告

一、实验目的1. 熟悉嵌入式系统硬件电路的搭建与调试;2. 掌握C语言编程,实现跑马灯功能;3. 理解并掌握GPIO口操作,学习定时器中断的使用。

二、实验环境1. 开发板:STM32F103C8T6开发板2. 编译器:Keil uVision53. 软件库:STM32标准外设库三、实验原理跑马灯实验是通过控制LED灯的亮灭,实现LED灯依次点亮的效果。

实验原理如下:1. GPIO口控制:将LED灯连接到开发板的GPIO口,通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;2. 定时器中断:定时器产生中断,实现LED灯点亮与熄灭的时间间隔;3. 循环控制:通过循环控制LED灯的点亮顺序,实现跑马灯效果。

四、实验步骤1. 硬件电路搭建(1)将LED灯的正极连接到开发板的GPIO口,负极接地;(2)将开发板的电源和地线连接到电源模块。

2. 软件编程(1)在Keil uVision5中创建项目,并导入STM32标准外设库;(2)编写程序,实现以下功能:a. 初始化GPIO口,将LED灯连接的GPIO口配置为输出模式;b. 初始化定时器,设置定时器中断周期,使LED灯点亮与熄灭的时间间隔为1ms;c. 编写定时器中断服务程序,控制LED灯的点亮与熄灭;d. 编写主函数,实现LED灯依次点亮的效果。

3. 编译与下载(1)编译程序,生成可执行文件;(2)将开发板连接到计算机,通过串口下载程序到开发板。

4. 实验调试(1)打开串口调试助手,观察LED灯的点亮与熄灭效果;(2)调整程序参数,优化跑马灯效果。

五、实验结果与分析1. 实验结果(1)LED灯依次点亮,实现跑马灯效果;(2)LED灯点亮与熄灭的时间间隔可调。

2. 实验分析(1)通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;(2)定时器中断实现LED灯点亮与熄灭的时间间隔控制;(3)循环控制实现LED灯依次点亮的效果。

六、实验总结本次实验成功实现了跑马灯功能,加深了对嵌入式系统硬件电路、C语言编程和GPIO口操作的理解。

嵌入式02STM32实验04跑马灯

嵌入式02STM32实验04跑马灯

嵌⼊式02STM32实验04跑马灯开学STM32跑马灯的实验主要就是了解GPIO⼝的配置及使⽤,我这⾥是使⽤库函数进⾏编程,主要需要设置以下两⽅⾯: 1、使能需要使⽤的IO⼝的时钟,⼀共有A、B、C、D、E、F、G七组IO⼝ 2、初始化IO⼝(设置IO⼝的端⼝号(有GPIO_Pin_0 ~ GPIO_Pin_15,共16个IO端⼝)、设置IO⼝的输出速度、设置IO⼝的⼯作模式)代码如下1//端⼝初始化2 #include "led.h"3 #include "stm32f10x.h"45void LED_Init(void)6 {7 GPIO_InitTypeDef GPIO_KST;8910 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能端⼝B和E1112 GPIO_KST.GPIO_Mode = GPIO_Mode_Out_PP; //设置端⼝模式为推挽输出13 GPIO_KST.GPIO_Pin = GPIO_Pin_5; //选择端⼝514 GPIO_KST.GPIO_Speed = GPIO_Speed_2MHz; //IO⼝的速度设置为2MHz15 GPIO_Init(GPIOB, &GPIO_KST); //初始化GPIOB.5161718 GPIO_KST.GPIO_Mode = GPIO_Mode_Out_PP; //设置端⼝模式为推挽输出19 GPIO_KST.GPIO_Pin = GPIO_Pin_5; //选择端⼝520 GPIO_KST.GPIO_Speed = GPIO_Speed_2MHz; //IO⼝的速度设置为2MHz21 GPIO_Init(GPIOE, &GPIO_KST); //初始化GPIOE.522 }主程序1//主程序2 #include "sys.h"3 #include "delay.h"4 #include "led.h"56int main(void)7 {8 delay_init(); //延时初始化9 LED_Init(); //LED初始化10while(1)11 {12 GPIO_ResetBits(GPIOE, GPIO_Pin_5); //关闭PE5端⼝的LED13 GPIO_SetBits(GPIOB, GPIO_Pin_5); //关闭PB5端⼝的LED14 delay_ms(500); //延时100ms15 GPIO_SetBits(GPIOE, GPIO_Pin_5);16 GPIO_ResetBits(GPIOB, GPIO_Pin_5); //打开PB5端⼝的LED17 delay_ms(500); //延时100ms18 }1920 }。

实验三:跑马灯实验

实验三:跑马灯实验

微控制器综合设计与实训实验名称:实验三跑马灯实验实验三:跑马灯实验1 实训任务(1) 编写程序,实现对LED1~LED8的轮流点亮;(2) 仿真调试,调整延时时间,利用仿真示波器观察延时时间长短;(3) 下载程序,观察跑马灯运行状况。

1.1 实验说明本实验将要实现的是控制实训平台上的8个LED灯实现一个类似跑马灯的效果,LED通过控制IO口的高低电平工作,因此实验的关键在于如何控制STM32的IO口输出。

1.2 实验步骤(1) 在实训平台上将IO口与LED(LED1~LED8)连接;(2) 复制工程模板文件夹,新建led.c和led.h文件,并将新建文件加入工程中;(3) 编写led.h文件,声明void LED_Init(void)初始化函数,宏定义LED1~LED8;(4) 编写led.c文件,建立void LED_Init(void)初始化函数,实现对LED灯用到的IO端口的配置,配置为推挽输出,速度为50MHZ;(5) 编写main()函数,实现对LED1~LED8的轮流点亮;(6) 软件仿真,调整延时时间,利用仿真示波器观察延时时间长短;(7) 下载程序,观察跑马灯的运行状况。

2 程序设计2.1 通过数组实现流水灯:2.2 通过宏定义实现流水灯:2.3 通过函数实现流水灯:2.4 通过SYSTICK中断实现流水灯:3硬件原理图设计4 总结通过数组实现流水灯:通过宏定义实现流水灯:通过函数实现流水灯:通过SYSTICK中断实现流水灯:实验心得:本次实验通过四种方法来实现流水灯,分别是通过数组实现流水灯,通过宏定义实现流水灯,通过函数实现流水灯,通过SYSTICK中断实现流水灯。

让我体会到单片机代码的多样性及强大的拓展功能。

MCU通过控制IO口的高低电平来直接控制LED的亮灭,所以本实验的关键是如何控制STM32的IO口输出,来达到我们想要的效果。

就比如灯光秀。

单片机跑马灯实验报告

单片机跑马灯实验报告

单片机跑马灯实验报告摘要:本实验通过使用单片机来控制LED灯进行跑马灯效果的展示。

通过简单的电路连接和编程,我们成功实现了单片机跑马灯的功能。

实验结果表明,单片机跑马灯是一种简单而有效的显示系统,可广泛应用于娱乐和装饰等领域。

引言:跑马灯效果是一种常见且受欢迎的LED显示效果,它可以不断地循环显示LED灯的亮灭轮廓,给人们带来视觉上的愉悦。

单片机是一种可编程的微控制器,广泛应用于电子系统的控制和管理。

在本实验中,我们将利用单片机来实现跑马灯效果,通过编程控制LED灯的亮灭来模拟跑马灯的效果。

材料和方法:本实验所需材料如下:1. 单片机开发板2. LED灯3. 面包板4. 连接线实验步骤:1. 将单片机开发板放置在面包板上,确保连接稳固。

2. 将LED灯连接到面包板上,按照电路图正确连接。

3. 接通电源,将USB线连接到单片机开发板上。

4. 在计算机上打开开发板的编程软件。

5. 编写程序代码,实现跑马灯的效果。

6. 将程序代码下载到单片机开发板中。

7. 观察LED灯的亮灭情况,检查是否实现了跑马灯效果。

结果和讨论:经过实验,我们成功实现了单片机跑马灯的效果。

LED灯按照指定的顺序循环亮灭,产生出跑马灯的效果。

通过调整程序代码,我们可以控制跑马灯的速度和亮灭顺序,使其更加多样化和有趣。

单片机跑马灯是一种简单而有效的LED显示系统。

它可以应用于各种场景,包括室内和室外的装饰灯,新闻标语显示,广告牌等。

跑马灯效果不仅能够吸引人们的目光,还可以起到一定的宣传和广告效果。

总结:通过本次实验,我们了解了单片机的基本原理和应用,并成功实现了单片机跑马灯的效果。

单片机跑马灯具有简单、低成本、可编程等优点,适用于各种需要循环显示效果的场景。

未来,我们可以探索更多有趣的跑马灯效果,并将其应用于实际项目中。

在这个数字化时代,单片机跑马灯有着广阔的应用前景,希望能够为人们的生活和工作带来更多的灵感和乐趣。

基于STM32的跑马灯实验的详细解析

基于STM32的跑马灯实验的详细解析

程序编写 一,程序的实现: 使开发板上的 LED1,LED2,LED3,LED4 循环点亮,实现流水灯效果。
硬件电路图: 二,编写 LED 子程序 1, led.h 头文件 2, led.c 源文件 3, 在 led.c 中如何使能 GPIO 时钟 (1)在库文件 rcc.hk 中找到”RCC_AHB1PeriphClockCmd(); “并将其复制 粘贴下来
成第一个入口函数如下:
(2)第二个入口参数,是个结构体
先将它复制粘贴下来,去掉*号,进行定义这个结构体:
完成第二个入口参数:
(3)用结re 加点来进行各类型的寄存器配置:
配置 GPIO_Mode 寄存器,点击 GPIO_Mode,右键 Go
To
Definition………查询如下:
再点击 GPIOMode_TypeDef,查询如下:
选择合适的类型,将其复制粘贴下来,完成 GPIO_Mode 的配置:
完成 GPIO 的配置:
三, 编写 main 函数
2, 重要的 GPIO 库函数 (1)GPIO 初始化函数 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); (2)设置电平输出函数 输出高电平: void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 输出低电平: void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
基于 STM32 的跑马灯实验的详细解析
我们用 C 语言来再学习 STM32,以加深理解,并且应用相关资料和官方 固件标准库。因此,我们来编写一个跑马灯实验 先前准备 一, 开发环境 安装 MDK5,并且导入 STM32 官方标准库。 STM32 官方标准库名称:stm32f4_dsp_stdperiph_lib 这个 STM32 官方固件标准库以前是可以在 ST 官网下载,现在好像在官 网上找不到了。 二,相关应用资料:STM32F4XX 中文参考手册

stm32f4 寄存器点灯实验原理

stm32f4 寄存器点灯实验原理

stm32f4 寄存器点灯实验原理原理是通过编程直接操作STM32F4芯片的GPIO寄存器来控制LED的亮灭。

具体的步骤如下:1. 首先,需要设置相应的引脚为输出模式。

通过修改GPIOx_MODER寄存器的相应位可以实现,将对应的引脚设置为输出模式。

2. 然后,需要设置相应的引脚输出高电平或低电平来点亮或熄灭LED。

通过修改GPIOx_ODR寄存器的相应位可以实现,将对应的引脚输出高电平或低电平。

3. 最后,程序将会在一个循环中反复执行设置输出低电平和高电平的操作,从而实现让LED闪烁的效果。

需要注意的是,在STM32F4中,不同的引脚对应的控制寄存器和位数是不同的,具体需要根据芯片手册来查找相应的寄存器和位数。

同时,在进行寄存器操作时,需要确保停用IO模块时钟使能,以免发生错误。

下面是一个使用STM32F4的GPIO控制LED点灯的简单示例代码:```c#include "stm32f4xx.h"void Delay(uint32_t nTime);int main(void){GPIO_InitTypeDef GPIO_InitStruct;// 启用GPIO的时钟使能RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);// 配置引脚为输出模式GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOD, &GPIO_InitStruct);while (1){// 点亮LEDGPIO_SetBits(GPIOD, GPIO_Pin_12);Delay(1000000);// 熄灭LEDGPIO_ResetBits(GPIOD, GPIO_Pin_12);Delay(1000000);}}// 延时函数void Delay(uint32_t nTime){if (nTime != 0){nTime--;while (nTime != 0);}}```在上述代码中,我们使用了寄存器操作来控制GPIO的输出。

跑马灯实验 微控制器STM32原理与应用实验指导

跑马灯实验 微控制器STM32原理与应用实验指导

跑马灯实验1 实验目的(1) 了解通用IO口的输出类型和初始化过程,学会对GPIO库函数的使用;(2) 掌握基本IO口的使用;(3) 利用GPIO函数和延时函数实现对LED灯的交替闪烁,实现类似跑马灯的效果。

2 实验任务(1) 编写程序,实现对LED1~LED8的轮流点亮;(2) 仿真调试,调整延时时间,利用仿真示波器观察延时时间长短;(3) 下载程序,观察跑马灯运行状况。

3 实验说明本实验将要实现的是控制实训平台上的8个LED灯实现一个类似跑马灯的效果,LED通过控制IO口的高低电平工作,因此实验的关键在于如何控制STM32的IO口输出。

4预习要求(1) 初始化IO口包括哪些基础设置。

(2)GPIO的输入输出模式。

5 实验步骤(1) 在实训平台上将IO口与LED(LED1~LED8)连接;(2) 复制工程模板文件夹,新建led.c和led.h文件,并将新建文件加入工程中;(3) 编写led.h文件,声明void LED_Init(void)初始化函数,宏定义LED1~LED8;(4) 编写led.c文件,建立void LED_Init(void)初始化函数,实现对LED灯用到的IO端口的配置,配置为推挽输出,速度为50MHZ;(5) 编写main()函数,实现对LED1~LED8的轮流点亮;(6) 软件仿真,调整延时时间,利用仿真示波器观察延时时间长短;(7) 下载程序,观察跑马灯的运行状况。

硬件设计本实验用到的硬件只有LED(LED1 ~ LED8)。

电路实训平台上默认是未连接好的,所以在硬件上需要根据自己的需要将其与MCU进行连接。

注意:LED的硬件为共阳极连接,需将IO口连接端置为低电平才能点亮。

LED模块原理图如4.1所示:图4.1 LED模块原理图软件设计(1) 新建文件,命名为跑马灯实验。

复制粘贴之前的Template工程。

图4.2 跑马灯实验文件(2) 新建LED文件。

在跑马灯实验文件夹下面新建一个HARDWARE的文件夹,用来存储与硬件相关的代码,然后在HARDWARE文件夹下新建一个LED 文件夹,用来存放与LED相关的代码,如图4.3所示。

STM32F4寄存器编写跑马灯例程

STM32F4寄存器编写跑马灯例程

STM32F4寄存器编写跑马灯例程最近由于在学习STM32看到别⼈⽤寄存器编程控制跑马灯,于是⾃⼰也想试⼀试。

可是试了好久终究弄不出来。

回头看了下库函数的调⽤关系才搞明⽩。

⾸先通过查看GPIOA的设置函数发现设置如下:void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct){uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00;/* Check the parameters */assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));/* ------------------------- Configure the port pins ---------------- *//*-- GPIO Mode Configuration --*/for (pinpos = 0x00; pinpos < 0x10; pinpos++){pos = ((uint32_t)0x01) << pinpos;/* Get the port pins position */currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;if (currentpin == pos){GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2));GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2));if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF)){/* Check Speed mode parameters */assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));/* Speed mode configuration */GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2));GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2));/* Check Output mode parameters */assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType));/* Output mode configuration*/GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)) ;GPIOx->OTYPER |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos));}/* Pull-up Pull down resistor configuration*/GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2));GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2));}}}GPIO_TypeDef端⼝设置结构体如下:typedef struct{__IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */__IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */__IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */__IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */__IO uint16_t BSRRL; /*!< GPIO port bit set/reset low register, Address offset: 0x18 */__IO uint16_t BSRRH; /*!< GPIO port bit set/reset high register, Address offset: 0x1A */__IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */} GPIO_TypeDef;改机构体根据结构体成员函数的⼤⼩⾃⼰形成了针对⾸地址的偏移量。

《STM32开发指南》第六章 跑马灯实验

《STM32开发指南》第六章 跑马灯实验

第六章跑马灯实验STM32最简单的外设莫过于IO口的高低电平控制了,本章将通过一个经典的跑马灯程序,带大家开启STM32之旅,通过本章的学习,你将了解到STM32的IO口作为输出使用的方法。

在本章中,我们将通过代码控制ALIENTEK战舰STM32开发板上的两个LED:DS0和DS1交替闪烁,实现类似跑马灯的效果。

本章分为如下四个小节:6.1,STM32 IO口简介6.2,硬件设计6.3,软件设计6.4,仿真与下载6.1 STM32 IO简介本章将要实现的是控制ALIENTEK战舰STM32开发板上的两个LED实现一个类似跑马灯的效果,该实验的关键在于如何控制STM32的IO口输出。

了解了STM32的IO口如何输出的,就可以实现跑马灯了。

通过这一章的学习,你将初步掌握STM32基本IO口的使用,而这是迈向STM32的第一步。

STM32的IO口可以由软件配置成如下8种模式:1、输入浮空2、输入上拉3、输入下拉4、模拟输入5、开漏输出6、推挽输出7、推挽式复用功能8、开漏复用功能每个IO口可以自由编程,但IO口寄存器必须要按32位字被访问。

STM32的很多IO口都是5V兼容的,这些IO口在与5V电平的外设连接的时候很有优势,具体哪些IO口是5V兼容的,可以从该芯片的数据手册管脚描述章节查到(I/O Level标FT的就是5V电平兼容的)。

STM32的每个IO端口都有7个寄存器来控制。

他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;这里我们仅介绍常用的几个寄存器,我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。

CRL和CRH控制着每个IO口的模式及输出速率。

STM32的IO口位配置表如表6.1.1所示:表6.1.1 STM32的IO口位配置表STM32输出模式配置如表6.1.2所示:表6.1.2 STM32输出模式配置表接下来我们看看端口低配置寄存器CRL的描述,如图6.1.1所示:图6.1.1 端口低配置寄存器CRL各位描述该寄存器的复位值为0X4444 4444,从图6.1.1可以看到,复位值其实就是配置端口为浮空输入模式。

二、STM32实验1跑马灯

二、STM32实验1跑马灯

/* Includes ------------------------------------------------------------------*/ #include "stm32f10x_lib.h" #include "system_config.h" #include "delay.h"
//修改日期:2010/5/27
//版本:V1.2
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//********************************************************************************
: main.c
* Author
: MCD Application Team
* Version
: V2.0.3
* Date
: 09/22/2008
* Description
: Main program body.
********************************************************************************
void Delay_ms(u32 us)
{
u16 i;
while(--us)
{
i=10300;
//约 1us
while(--i);
}
}
/*******************************************************************************

stm32跑马灯实验报告

stm32跑马灯实验报告

stm32跑马灯实验报告《STM32跑马灯实验报告》实验目的:本实验旨在通过使用STM32单片机,实现一个简单的跑马灯效果,以加深对STM32单片机的理解和掌握。

实验器材:1. STM32单片机开发板2. USB数据线3. LED灯4. 电阻5. 连线实验原理:STM32单片机是一款功能强大的微控制器,具有丰富的外设和强大的处理能力。

在本实验中,我们利用STM32单片机的GPIO(通用输入输出)功能,控制LED灯的亮灭,从而实现跑马灯效果。

实验步骤:1. 连接STM32单片机开发板和电脑,使用Keil或者其他编程软件进行程序编写。

2. 编写程序,通过控制GPIO口的高低电平,实现LED灯的跑马灯效果。

3. 将编写好的程序下载到STM32单片机开发板中。

4. 连接LED灯和STM32单片机的GPIO口,确保连接正确。

5. 通过电脑或者外部电源给STM32单片机供电,观察LED灯的跑马灯效果。

实验结果:经过实验,我们成功实现了STM32单片机的跑马灯效果。

LED灯在不同的GPIO口控制下,能够呈现出流畅的跑马灯效果,整个实验过程非常顺利。

实验总结:通过本次实验,我们进一步了解了STM32单片机的GPIO控制功能,掌握了如何通过编程实现LED灯的控制。

同时也加深了对STM32单片机的理解和应用能力。

在今后的学习和工作中,我们将进一步深入研究STM32单片机的应用,为实际项目的开发和应用打下坚实的基础。

通过这次实验,我们不仅掌握了STM32单片机的基本应用,还增强了对微控制器的理解和应用能力。

希望通过不断的实验和学习,我们能够更加熟练地运用STM32单片机,为未来的工程项目做出更大的贡献。

stm32跑马灯实验报告

stm32跑马灯实验报告

stm32跑马灯实验报告STM32跑马灯实验报告引言:STM32是一款广泛应用于嵌入式系统开发的微控制器,具有高性能、低功耗和丰富的外设接口。

跑马灯实验是入门级的STM32实验项目,通过控制LED灯的亮灭顺序实现跑马灯效果。

本实验报告将详细介绍实验的目的、原理、实施步骤以及实验结果。

一、实验目的跑马灯实验旨在通过STM32的GPIO控制LED灯的亮灭,实现灯光在多个LED之间依次点亮和熄灭的效果。

通过这个实验,我们可以了解STM32的GPIO口的操作方式,掌握基本的STM32编程技巧。

二、实验原理STM32的GPIO口可以设置为输出模式,通过控制GPIO口的电平(高电平或低电平)来控制LED灯的亮灭。

跑马灯实验中,我们将多个LED连接到STM32的不同GPIO口上,通过依次改变GPIO口的电平状态,实现灯光在不同LED之间依次传递的效果。

三、实施步骤1. 准备材料:STM32开发板、杜邦线、若干个LED灯。

2. 连接电路:将多个LED分别连接到STM32的不同GPIO口上,确保极性正确。

3. 创建工程:使用Keil等开发环境创建STM32工程,并配置好相应的引脚。

4. 编写代码:在main函数中编写代码,通过设置GPIO口的电平状态实现跑马灯效果。

5. 编译烧录:编译代码生成可执行文件,并将其烧录到STM32开发板上。

6. 运行实验:将STM32开发板上电,观察LED灯的亮灭顺序是否符合预期。

四、实验结果经过实验,我们成功实现了跑马灯效果。

LED灯在不同的GPIO口之间依次点亮和熄灭,形成了流动的灯光效果。

通过调整代码中GPIO口的顺序和时间延迟,我们还可以改变灯光的流动速度和方向。

实验结果与预期一致,验证了我们的设计和实施的正确性。

五、实验总结通过这个实验,我们对STM32的GPIO控制和编程有了更深入的了解。

我们学会了如何通过改变GPIO口的电平状态来控制外部设备,掌握了基本的STM32编程技巧。

菜鸟学STM32之跑马灯

菜鸟学STM32之跑马灯

菜鸟学STM32之跑马灯微信公众号:⼩樊Study关注共同学习,问题或建议,请公众号留⾔作为⼀名程序员,在初步学习编程想必都绕不开⼀个最为基础的⼊门级⽰例“Hello World”,那么,在学习单⽚机时,最基础的⼊门⽰例是什么呢?没错,那就是“点亮⼀盏LED灯”本次将通过⼀个经典的跑马灯程序,带⼤家开启 STM32F4 之旅,通过本次的学习,你将了解到STM32F4 的 IO ⼝作为输出使⽤的⽅法。

我们将通过代码控制STM32F4 开发板上的两个 LED:DS0 和 DS1 交替闪烁,实现类似跑马灯的效果。

硬件连接GPIO⼯作⽅式4种输⼊模式:输⼊浮空输⼊上拉输⼊下拉模拟输⼊4种输出模式:开漏输出(带上拉或者下拉)开漏复⽤功能(带上拉或者下拉)推挽式输出(带上拉或者下拉)推挽式复⽤功能(带上拉或者下拉)4种最⼤输出速度:-2MHZ-25MHz-50MHz-100MHz软件设计led.c#include "led.h"////////////////////////////////////////////////////////////////////////////////////初始化PF9和PF10为输出⼝.并使能这两个⼝的时钟//LED IO初始化void LED_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟//GPIOF9,F10初始化设置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1对应IO⼝GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOGPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIOF9,F10设置⾼,灯灭}该代码⾥⾯就包含了⼀个函数 void LED_Init(void),该函数的功能就是⽤来实现配置 PF9和 PF10 为推挽输出。

实验一跑马灯实验

实验一跑马灯实验

目录实验一跑马灯实验 (1)实验二按键输入实验 (3)实验三串口实验 (5)实验四外部中断实验 (8)实验五独立看门狗实验 (11)实验七定时器中断实验 (13)实验十三ADC实验 (15)实验十五DMA实验 (17)实验十六I2C 实验 (21)实验十七SPI 实验 (24)实验二十一红外遥控实验 (27)实验二十二DS18B20实验 (30)1 / 32'.实验一跑马灯实验一.实验简介我的第一个实验,跑马灯实验。

二.实验目的掌握STM32 开发环境,掌握从无到有的构建工程。

三.实验内容熟悉MDK KEIL 开发环境,构建基于固件库的工程,编写代码实现跑马灯工程。

通过ISP 下载代码到实验板,查看运行结果。

使用JLINK 下载代码到目标板,查看运行结果,使用JLINK 在线调试。

四.实验设备硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤1.熟悉MDK KEIL 开发环境2.熟悉串口编程软件ISP3.查看固件库结构和文件4.建立工程目录,复制库文件5.建立和配置工程6. 编写代码7. 编译代码8.使用ISP下载到实验板9.测试运行结果10.使用JLINK 下载到实验板11.单步调试12. 记录实验过程,撰写实验报告六.实验结果及测试源代码:int main(void}<5tm32_Clock_IniC (9); /,耒红对甘去置delay^init (72 >; "延吋初始<tLED Tnit:C>;"初维花与LED连接的硬伴接口while tl){匚EDO=O;匸ED1=1;de .lay ms (300 J ;LEDO=1;LEDL-0;delay ms(3"0^;两个灯LEDO与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。

实验一 跑马灯实验

实验一 跑马灯实验

目录实验一跑马灯实验 (1)实验二按键输入实验 (3)实验三串口实验 (5)实验四外部中断实验 (8)实验五独立看门狗实验 (11)实验七定时器中断实验 (13)实验十三 ADC实验 (15)实验十五 DMA实验 (17)实验十六 I2C实验 (21)实验十七 SPI实验 (24)实验二十一红外遥控实验 (27)实验二十二 DS18B20实验 (30)实验一跑马灯实验一.实验简介我的第一个实验,跑马灯实验。

二.实验目的掌握STM32开发环境,掌握从无到有的构建工程。

三.实验内容熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现跑马灯工程。

通过ISP 下载代码到实验板,查看运行结果。

使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。

四.实验设备硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤1.熟悉MDK KEIL开发环境2.熟悉串口编程软件ISP3.查看固件库结构和文件4.建立工程目录,复制库文件5.建立和配置工程6.编写代码7.编译代码8.使用ISP下载到实验板9.测试运行结果10.使用JLINK下载到实验板11.单步调试12.记录实验过程,撰写实验报告六.实验结果及测试源代码:两个灯LED0与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。

七.实验总结通过本次次实验我了解了STM32开发板的基本使用,初次接触这个开发板和MDK KEILC 软件,对软件操作不太了解,通过这次实验了解并熟练地使用MDK KEIL软件,用这个软件来编程和完成一些功能的实现。

作为STM32 的入门第一个例子,详细介绍了STM32 的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。

实验二按键输入实验一.实验简介在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。

王健带你征服STM32新建工程与跑马灯实验

王健带你征服STM32新建工程与跑马灯实验

功能描述 重新初始化外围设备GPIOx相关寄存器到它的默认复位值 初始化交错功能(remap, event control和 EXTI 配置) 寄存器 根据GPIO_初始化结构指定的元素初始化外围设备GPIOx 填充GPIO_初始化结构(GPIO_InitStruct)内的元素为复位值 读指定端口引脚输入数据 读指定端口输入数据 读指定端口引脚输出数据 读指定端口输出数据
5
这里,如果有的人觉得不知道使用了哪些库函数,不晓得添加哪些库文件进入工程,有个最简单的办法就是 添 加 所 有 的 固 件 库 函 数 到 工 程 , 为 了 方 便 可 以 直 接 添 加 : C:\Keil\ARM\RV31\LIB\ST 路 径 下 的
6
STM32F10xR.LIB 文件到工程的 Lib.添加方法跟前面的一样:
置1指定的端口引脚 清0指定的端口引脚 设置或清除选择的数据端口引脚 写指定数据到GPIOx端口寄存器 允许或禁止 GPIO 4 模拟输入模式 锁定GPIO引脚变指定引脚的影射 允许或禁止GPIO 8 和 9 的EMI 模式
7.13
JTAG 的失能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 ; //configure Pin0,1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 最高输出速率 50Hz
函数名称功能描述gpiodeinit重新初始化外围设备gpiox相关寄存器到它的默认复位值gpioafiodeinit初始化交错功能remapeventcontrol和exti配置寄存器gpioinit根据gpio初始化结构指定的元素初始化外围设备gpioxgpiostructinit填充gpio初始化结构gpioinitstruct内的元素为复位值gpioreadinputdatabit读指定端口引脚输入数据gpioreadinputdata读指定端口输入数据gpioreadotputdatabit读指定端口引脚输出数据gpioreadotputdata读指定端口输出数据gpiosetbits置1指定的端口引脚gpioresetbits清0指定的端口引脚gpiowritebit设置或清除选择的数据端口引脚gpiowrite写指定数据到gpiox端口寄存器gpioanapinconfig允许或禁止gpio模拟输入模式gpiopinlockconfig锁定gpio引脚寄存器gpioeventoutputconfig选择gpio引脚作为事件输出gpioeventoutputcmd允许或禁止事件输出gpiopinremapconfig改变指定引脚的影射gpioemiconfig允许或禁止gpio的emi模式713jtag做流水灯使用到gpiob3和gpio4时你会发现这两个引脚上的led有问题不能像其他的led那样正常工作其实不是led损坏了而是jtag没有失能
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表 5.2.5.4 GPIOx PUPDR 寄存器各位描述
144
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
该寄存器每 2 个位控制一个 IO 口,用于设置上下拉,这里提醒大家,STM32F1 是通过 ODR 寄存器控制上下拉的,而 STM32F4 则由单独的寄存器 PUPDR 控制上下拉,使用起来更加灵活。 复位后,该寄存器值一般为 0。
142
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
对寄存器有个初步的了解。大家学习固件库,并不需要记住每个寄存器的作用,而只是通过了 解寄存器来对外设一些功能有个大致的了解,这样对以后的学习也很有帮助。
首先要提一下,在固件库中,GPIO 端口操作对应的库函数函数以及相关定义在文件 stm32f4xx_gpio.h 和 stm32f4xx_gpio.c 中。
相对于 STM32F1 来说,STM32F4 的 GPIO 设置显得更为复杂,也更加灵活,尤其是复用 功能部分,比 STM32F1 改进了很多,使用起来更加方便。
STM32F4 每组通用 I/O 端口包括 4 个 32 位配置寄存器(MODER、OTYPER、OSPEEDR 和 PUPDR)、2 个 32 位数据寄存器(IDR 和 ODR)、1 个 32 位置位/复位寄存器 (BSRR)、 1 个 32 位锁定寄存器 (LCKR) 和 2 个 32 位复用功能选择寄存器(AFRH 和 AFRL)等。
6.1, STM32F4 IO 口简介 6.2, 硬件设计 6.3, 软件设计 6.4, 下载验证
6.1 STM32F4 IO 简介
本章将要实现的是控制 ALIENTEK 探索者 STM32F4 开发板上的两个 LED 实现一个类似跑 马灯的效果,该实验的关键在于如何控制 STM32F4 的 IO 通过这一章的学习,你将初步掌握 STM32F4 基本 IO 口的使 用,而这是迈向 STM32F4 的第一步。
这一章节因为是第一个实验章节,所以我们在这一章将讲解一些知识为后面的实验做铺垫。 为了小节标号与后面实验章节一样,这里我们不另起一节来讲。
在讲解 STM32F4 的 GPIO 之前,首先打开我们光盘的第一个固件库版本实验工程跑马灯实 验工程(光盘目录为:“4,程序源码\标准例程-库函数版本\实验 1 跑马灯/USER/ LED.uvproj”), 可以看到我们的实验工程目录:
ALIENTEK 探索者 STM32F407 开发板教程
个 IO,不同设置所对应的模式见表 5.2.5.1 描述。 然后看 OTYPER 寄存器,该寄存器用于控制 GPIOx 的输出类型,该寄存器各位描述见表
5.2.5.2 所示:
表 5.2.5.2 GPIOx OTYPER 寄存器各位描述 该寄存器仅用于输出模式,在输入模式(MODER[1:0]=00/11 时)下不起作用。该寄存器 低 16 位有效,每一个位控制一个 IO 口,复位后,该寄存器值均为 0。 然后看 OSPEEDR 寄存器,该寄存器用于控制 GPIOx 的输出速度,该寄存器各位描述见表 5.2.5.3 所示:
141
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
图 6.1.1 跑马灯实验目录结构 接下来我们逐一讲解一下我们的工程目录下面的组以及重要文件。 ① 组 FWLib 下面存放的是 ST 官方提供的固件库函数,每一个源文件 stm32f4xx_ppp.c 都对
表 5.2.5.3 GPIOx OSPEEDR 寄存器各位描述 该寄存器也仅用于输出模式,在输入模式(MODER[1:0]=00/11 时)下不起作用。该寄存 器每 2 个位控制一个 IO 口,复位后,该寄存器值一般为 0。 然后看 PUPDR 寄存器,该寄存器用于控制 GPIOx 的上拉/下拉,该寄存器各位描述见表 5.2.5.4 所示:
前面,我们讲解了 4 个重要的配置寄存器。顾名思义,配置寄存器就是用来配置 GPIO 的 相关模式和状态,接下来我们讲解怎么在库函数初始化 GPIO 的配置。
GPIO 相关的函数和定义分布在固件库文件 stm32f4xx_gpio.c 和头文件 stm32f4xx_gpio.h 文 件中。
在固件库开发中,操作四个配置寄存器初始化 GPIO 是通过 GPIO 初始化函数完成: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) 这个函数有两个参数,第一个参数是用来指定需要初始化的 GPIO 对应的 GPIO 组,取值范围 为 GPIOA~GPIOK。第二个参数为初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef。 下面我们看看这个结构体的定义。首先我们打开我们光盘的跑马灯实验,然后找到 FWLib 组下 面的 stm32f4xx_gpio.c 文件,定位到 GPIO_Init 函数体处,双击入口参数类型 GPIO_InitTypeDef 后右键选择“Go to definition of …”可以查看结构体的定义: typedef struct {
这样,STM32F4 每组 IO 有 10 个 32 位寄存器控制,其中常用的有 4 个配置寄存器+2 个数 据寄存器+2 个复用功能选择寄存器,共 8 个,如果在使用的时候,每次都直接操作寄存器配置 IO,代码会比较多,也不容易记住,所以我们在讲解寄存器的同时会讲解是用库函数配置 IO 的方法。
同 STM32F1 一样,STM32F4 的 IO 可以由软件配置成如下 8 种模式中的任何一种: 1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入 5、开漏输出 6、推挽输出 7、推挽式复用功能 8、开漏式复用功能 关于这些模式的介绍及应用场景,我们这里就不详细介绍了,感兴趣的朋友,可以看看这 个帖子了解下:/posts/list/32730.htm 。接下来我们详细介绍 IO 配置常 用的 8 个寄存器: MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR 、AFRH 和 AFRL。 同时讲解对应的库函数配置方法。 首先看 MODER 寄存器,该寄存器是 GPIO 端口模式控制寄存器,用于控制 GPIOx (STM32F4 最多有 9 组 IO,分别用大写字母表示,即 x=A/B/C/D/E/F/G/H/I,下同)的工作模 式,该寄存器各位描述如表 5.2.5.1 所示:
表 5.2.5.1 GPIOx MODER 寄存器各位描述 该寄存器各位在复位后,一般都是 0(个别不是 0,比如 JTAG 占用的几个 IO 口),也就是 默认条件下一般是输入状态的。每组 IO 下有 16 个 IO 口,该寄存器共 32 位,每 2 个位控制 1
143
STM32F4 开发指南(库函数版)
应一个头文件 stm32f4xx_ppp.h。分组内的文件我们可以根据工程需要添加和删除,但是 一定要注意如果你引入了某个源文件,一定要在头文件 stm32f4xx_conf.h 文件中确保对 应的头文件也已经添加。比如我们跑马灯实验,我们只添加了 5 个源文件,那么对应的 头文件我们必须确保在 stm32f4xx_conf.h 内也包含进来,否则工程会报错。 ② 组 CORE 下面存放的是固件库必须的核心文件和启动文件。这里面的文件用户不需要修 改。大家可以根据自己的芯片型号选择对应的启动文件。 ③ 组 SYSTEM 是 ALIENTEK 提供的共用代码,这些代码的作用和讲解在第五章都有讲解, 大家可以翻过去看下。 ④ 组 HARDWARE 下面存放的是每个实验的外设驱动代码,他的实现是通过调用 FWLib 下面的固件库文件实现的,比如 led.c 里面调用 stm32f4xx_gpio.c 内定义的函数对 led 进 行初始化,这里面的函数是讲解的重点。后面的实验中可以看到会引入多个源文件。 ⑤ 组 USER 下面存放的主要是用户代码。但是 system_stm32f4xx.c 文件用户不需要修改, 同时 stm32f4xx_it.c 里面存放的是中断服务函数,这两个文件的作用在 3.1 节有讲解,大 家可以翻过去看看。Main.c 函数主要存放的是主函数了,这个大家应该很清楚。 工程分组情况我们就讲解到这里,接下来我们就要进入我们跑马灯实验的讲解部分了。这 里需要说明一下,我们在讲解固件库之前会首先对重要寄存器进行一个讲解,这样是为了大家
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
第六章 跑马灯实验
任何一个单片机,最简单的外设莫过于 IO 口的高低电平控制了,本章将通过一个经典的 跑马灯程序,带大家开启 STM32F4 之旅,通过本章的学习,你将了解到 STM32F4 的 IO 口作 为输出使用的方法。在本章中,我们将通过代码控制 ALIENTEK 探索者 STM32F4 开发板上的 两个 LED:DS0 和 DS1 交替闪烁,实现类似跑马灯的效果。 本章分为如下四个小节:
uint32_t GPIO_Pin; GPIOMode_TypeDef GPIO_Mode; GPIOSpeed_TypeDef GPIO_Speed; GPIOOType_TypeDef GPIO_OType; GPIOPuPd_TypeDef GPIO_PuPd; }GPIO_InitTypeDef; 下面我们通过一个 GPIO 初始化实例来讲解这个结构体的成员变量的含义。 通过初始化结构体初始化 GPIO 的常用格式是: GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9//GPIOF9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化 GPIO 上面代码的意思是设置 GPIOF 的第 9 个端口为推挽输出模式,同时速度为 100M,上拉。 从上面初始化代码可以看出,结构体 GPIO_InitStructure 的第一个成员变量 GPIO_Pin 用来 设置是要初始化哪个或者哪些 IO 口,这个很好理解;第二个成员变量 GPIO_Mode 是用来设置 对应 IO 端口的输出输入端口模式,这个值实际就是配置我们前面讲解的 GPIOx 的 MODER 寄 存器的值。在 MDK 中是通过一个枚举类型定义的,我们只需要选择对应的值即可: typedef enum { GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */ GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */ GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */ GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */ }GPIOMode_TypeDef;
相关文档
最新文档