文章目录
一、实验名称
跑马灯实验(配QSDP-X2实验箱)
二、实验目的
(1)掌握kiel软件使用方法,MDK5软件编译平台安装
(2)MDK5软件编译平台使用与新建工程
(3)stm32单片机的开发,了解什么是stm32,以及学习开发环境的搭建。
(4)掌握STM32基本I/O口输出操作
三、实验说明
相比较51单片机,STM32有许多远超51的功能,最明显也是最突出的是STM32精确的时钟,和超多的I/O引脚资源。
首先,要想学好STM32单片机,最基础的事,了解如何初步控制STM32单片机的引脚输出输入。STM32F103ZET6有7组I/O口,每组有16个I/O口,总计112个I/O资源。GPIOABCDEFG。这些I/O口除了做普通I/O外,还有许多复用外设功能,此后我们在实验中会一一介绍。本次试验主要向大家介绍STM32的I/O的8种不同工作模式,以及如何配置和该配置在何种情况下用。
1、STM32的I/O口总分为两大类,
(1)4种输入模式:
1)输入浮空
2)输入上拉
3)输入下拉
4)模拟输入
(2)4种输出模式:
1)开漏输出
2)开漏复用功能
3)推挽式输出
4)推挽式复用功能
2、此外每个I/O口的电平翻转速度可选为,
(1)2MHZ
(2)10MHZ
(3)50Mhz
3、上电复位后,GPIO默认为浮空状态,部分特殊功能引脚为特定状态。
4、推挽输出与开楼输出的区别,
(1)推挽输出:
可以输出强高低电平,连接数字器件
(2)开漏输出:
只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极.,要得到高电平状态需要上拉电阻才行, 适合于做电流型的驱动,其吸收电流的能力相对较强(一般20ma以内)。
5、STM32的每组GPIO端口的寄存器包括:
(1)两个32位配置寄存器(GPIOx_CRL和GPIOx_CRH),
-GPIOx_CRL :端口配置低寄存器- GPIOx_CRH:端口配置高寄存器
(2)两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR),
-GPIOx_IDR:端口输入寄存器
-GPIOx_ODR:端口输出寄存器
(3)一个32位置位/ 复位寄存器(GPIOx_BSRR),
-GPIOx_BSRR:端口位设置/清除寄存器
(4)一个16位复位寄存器(GPIOx_BRR),
-GPIOx_BRR:端口位清除寄存器
(5)一个32位锁定寄存器(GPIOx_LCKR)。
-GPIOx_LCKR:端口配置锁存寄存器
在使用库函数操作时,都是通过已封装好的库函数来对I/O口操作。
(具体请参考文档“STM32八种IO口模式区别.pdf”)
四、实验设备
1、STM32F103核心板—DCP-401模块。
2、-link下载器。
3、直流电源—QSDP-X2-01模块。
4、实验导线。
5、计算机
五、实验注意事项
1、实验前确保实验箱的板面整洁,板面无杂乱金属器件,以防造成核心板上电发生短路,损坏板载元器件。
2、实验中请仔细观察核心板原理图及其实验外设电路,以防出现连接线错误造成的短路、器件损坏现象。
3、实验时接线要采取外设电路“电源线最后”的原则,即先下载程序,再连接外设数据传输线路,最后连接外设店路电源。因此,要保证上电前的线路连接正确。
4、实验中若出现任何突发情况,请及时关闭实验箱右上角的“电源开关”。
5、试验后请先拔出电源“+12V”处的电源线,若以“J-link”供电,则先拔出“J-link”,再逐个拔出其余的板上连接线。合上实验箱。
使用STM32CubeIDE具体实验步骤如下:
步骤一:搭建开发环境
首先需要下载并安装STM32CubeIDE,该软件可以帮助我们进行程序编译、下载和调试。安装完成后,需要选择对应的芯片型号和开发板。
步骤二:创建工程
在STM32CubeIDE中创建一个新的工程,在创建工程的过程中需要选择芯片型号和配置外设资源等。创建完成后,工程目录中会自动生成各种驱动文件和库文件。
步骤三:编写程序
在“main.c”文件中编写程序代码。程序代码的主要功能是通过控制GPIO口的电平变化来实现跑马灯的效果。具体实现方式是通过设置GPIO口的输出模式为推挽输出,分别控制不同的GPIO口输出高低电平。
#include "main.h"
uint16_t LED_Pin[4] = {GPIO_PIN_5, GPIO_PIN_6, GPIO_PIN_7, GPIO_PIN_8}; // 定义四个LED灯对应的GPIO口
int main(void)
{
HAL_Init(); // 初始化HAL库
MX_GPIO_Init(); // 初始化GPIO口
int led_index = 0; // 定义LED灯的索引变量
while (1)
{
HAL_GPIO_WritePin(GPIOA, LED_Pin[led_index], GPIO_PIN_SET); // 打开当前LED灯
HAL_Delay(200); // 延时一段时间
HAL_GPIO_WritePin(GPIOA, LED_Pin[led_index], GPIO_PIN_RESET); // 关闭当前LED灯
led_index++; // 索引变量加一,选择下一个LED灯
if (led_index >= 4) // 判断索引变量是否超出范围
led_index = 0; // 如果超出范围则重新从第一个灯开始
}
}
步骤四:编译、下载和调试
编写程序代码后,需要进行编译、下载和调试。首先进行编译,如果编译通过则可以进行下载。在下载之前需要将开发板连接到电脑,并选择对应的串口进行下载。下载完成后,可以进行调试验证程序是否正常运行。
在跑马灯实验中,我们通过控制四个LED灯的电平变化来实现跑马灯的效果。具体实现方式是通过设置GPIO口的输出模式为推挽输出,分别控制不同的GPIO口输出高低电平。在程序中我们使用了HAL库提供的GPIO口控制函数,通过循环实现了LED灯的不断闪烁。
使用Kile实现步骤
STM32单片机是一种高性能低功耗的嵌入式处理器,其拥有丰富的外设和强大的处理能力,可以广泛应用于各种嵌入式系统中。在本文中,我们将介绍如何使用STM32单片机实现一个跑马灯实验。
一、实验原理
跑马灯实验是最基础的实验之一,其原理是利用单片机的GPIO控制LED灯的亮灭,通过不同的灯光顺序和速度组合成不同的效果。本实验采用STM32F103C8T6单片机,并通过Keil C编译器进行程序设计。
二、实验器件
1、STM32F103C8T6单片机;
2、LED灯若干;
3、10K欧姆电阻若干;
4、面包板若干;
5、杜邦线若干。
三、实验步骤
1、连接硬件电路
将STM32单片机、LED灯、10K欧姆电阻和面包板连接成如下电路图所示的电路。其中,PB0~PB7引脚连接LED灯的正极,LED灯的负极通过10K欧姆电阻连接地。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YGfnd3oU-1692932134434)(https://user-images.githubusercontent.com/57705582/128339560-18d1dc83-7df3-44fb-a6d8-8c183ad7b748.png)]
2、新建Keil工程
在Keil环境下新建一个STM32F103工程,并进行如下配置:
(1)选择”Project” -> ”New uVision Project…”,并选择STM32F103C8作为目标器件。
(2)将”Device” -> ”Startup” -> ”system_stm32f10x.c”文件添加至工程中。
(3)在”Options for Target”中选择正确的芯片型号,并配置系统时钟频率为72MHz。
3、编写程序代码
在Keil环境下编写程序代码,代码如下:
#include "stm32f10x.h"
#include "delay.h"
#define LED_GPIO GPIOB
#define LED_PIN GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Pin = LED_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(LED_GPIO, &GPIO_InitStruct);
}
void LED_Reverse(void)
{
u8 i;
for (i = 0; i < 8; i++)
{
GPIO_WriteBit(LED_GPIO, LED_PIN, Bit_RESET);
GPIO_WriteBit(LED_GPIO, 1 << i, Bit_SET);
delay_ms(100);
}
}
int main(void)
{
LED_Init();
while (1)
{
LED_Reverse();
}
}
程序代码中,先定义了LED_GPIO和LED_PIN宏定义,分别表示LED灯的控制引脚和控制位。在程序主函数中,首先调用LED_Init函数进行GPIO的初始化,然后通过LED_Reverse函数控制LED灯的亮灭。LED_Reverse函数使用循环控制LED灯的顺序和亮灭时间。
四、实验结果
编译程序后,将程序下载至STM32单片机中并运行,即可观察到跑马灯效果。当灯光流动到最后一盏灯后,便会重新从第一盏灯开始循环。
六、实验总结
1.实验软件安装很顺畅,学习开发环境也搭建完成。在进行代码编译时出现一个错误,可能与电脑设备有关,因为部分同学电脑未出现错误,随即我和另外的同学一起进行实验,链接好实验设备
2.程序仿真完成后,发光二极管会有规律的从左向右循环闪亮。
3.之后我们又利用写好的代码程序和实验箱进行了其他实验。
本文介绍了如何使用STM32单片机实现跑马灯实验。通过该实验,可以加深对STM32单片机GPIO的理解,掌握基本的程序设计技巧。在日后的嵌入式系统开发中,可以根据实际需求进行程序设计,实现更为复杂的功能。