嵌入式系统学习笔记之“流水灯”——STM32(一)
一、 实验目的
1.1 掌握STM32F103ZET6单片机的基本结构与工作原理。
1.2 学习使用GPIO端口进行简单的输出控制。
1.3 了解定时器的基本使用方法,通过定时器控制LED灯的流水效果。
1.4 提升对嵌入式系统开发的理解与应用能力。
二、 实验原理
2.1.STM32F103ZET6简介
STM32F103ZET6是一款基于ARM Cotex-M3内核的微控制器,由意法半导体STMicroelectronics)公司生产,它具有高性能,低功耗、丰富的外设和强大的处理能力,广泛应用于工业控制、汽车电子、智能家居等领域。该芯片具有512KB的Flash存储器和64KB的SRAM,支持多种通信接口,如SPI、I2C、USART等。此外,它还具有多个定时器、ADC、DAC等模块,可满足各种应用需求。
–最高72MHz工作频率
–内嵌经出厂调教的8MHz的RC振荡器
–串行单线调试(SWD)和JTAG接口
–多达8个定时器
–3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入
–2个看门狗定时器(独立的和窗口型的):防止程序跑飞,单片机自动复位
–系统时间定时器:一种简单的,24位写清零、递减、自装载同时具有可灵活控制机制的计数器。
–2个I2C接口(支持SMBus/PMBus):一种简单、双向二线制同步串行总线
–3个USART接口(支持ISO7816接口,LIN,IrDA接口和调制解调控制):通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块
–2个SPI接口(18M位/秒):总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
————————————————
参考链接:
stm32f103zet6芯片及其单片机(硬件)的总结
2.2.LED原理图
2.3.流水灯原理
①GPIO配置:将STM32F103ZET6的GPIO引脚配置为输出模式,用于驱动LED灯。
②延时控制:通过延时函数来控制LED的点亮和熄灭时间,从而实现LED的流水效果。
③代码实现:通过简单的循环和延时,实现LED的依次点亮和熄灭。
三、实验步骤
3.1.下载keil 5软件。
3.2.配置ST-Link Debugger环境:
单击“魔术棒”:
选择“STM32F103ZE”系列:
点击“Debug”并在下方选择“ST-Link Debugger”:
接下来就可以编写代码了。
四、实验代码
4.1.main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
int main(void)
{
delay_init();
LED_Init();
while(1)
{
LED0=0;
LED1=1;
delay_ms(300);
LED0=1;
LED1=0;
delay_ms(300);
}
}
4.2.led.c
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
}
4.3.led.h
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#define LED0 PBout(5)
#define LED1 PEout(5)
void LED_Init(void);
#endif
五、实验结果展示
最终得到的效果如下:
流水灯
六、心得体会
本实验通过结合硬件连接和软件编程,成功实现了基于STM32F103ZET6的流水灯效果。通过该实验,不仅巩固了对单片机基本功能的理解,还提高了实际动手能力和调试技巧,为后续更复杂的嵌入式开发打下了坚实基础。