【无标题】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

基于标准外设库的LED流水灯

一、实验要求

在之前实验的基础上,改用标准外设库方式使用某个端口GPIOx端口管脚控制几个LED灯,轮流闪烁,间隔时长1秒。

(1)写出工程项目创建文件夹、添加STM32标准外设库文件(.c,.h)的详细过程;

(2)LED灯的亮/灭周期是通过软件循环延时完成的,其准确周期大致是多少呢?

在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察GPIO端口的输出波形,并分析时序状态正确与否、高低电平转换周期(LED闪烁周期)实际为多少。

二、使用步骤

1.下载STM32官方固件库(标准固件库)

标准外设库是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器,是针对某一系列芯片而言的,没有可移植性。标准外设库由程序、数据结构和宏组成,覆盖了微控制器所有外设的性能特征,为开发者访问底层硬件提供了一个中间API。它实现了各外设的基本操作接口,将一些基本的寄存器操作封装成了C函数,使得开发者无需深入掌握底层硬件细节,就可以轻松应用每一个外设。
在这里插入图片描述
在这里插入图片描述
STM32F1xx_StdPeriph_Examples包含了基于STM32CubeMX软件生成的初始化代码,以示例的形式提供了很多外设模块的运用,比如GPIO、USART、SPI等等。

STM32F1xx_StdPeriph_Template是利用STM32CubeMX软件创建新工程时的模板文件夹。其中包含了基于IAR或Keil的工程模板,这些模板中已经配置好了与STM32CubeMX相关的选项,可以直接使用。除此之外,这个文件夹中还包含了用于配置STM32CubeMX选项的配置文件,以及用于生成初始化代码的脚本文件。

2.Keil5工程文件创建

在这里插入图片描述

代码如下:

#include "stm32f10x.h"                  // Device header
void Delay_ms(u32 i)
 {
     u32 temp;
	 SysTick->LOAD=9000*i;      //设置重装数值, 72MHZ时
     SysTick->CTRL=0X01;        //使能,减到零是无动作,采用外部时钟源
    SysTick->VAL=0;            //清零计数器
     do
   {
        temp=SysTick->CTRL;       //读取当前倒计数值
    }
    while((temp&0x01)&&(!(temp&(1<<16))));    //等待时间到达
     SysTick->CTRL=0;    //关闭计数器
    SysTick->VAL=0;        //清空计数器
}
int main(void)
{
		GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	while (1)
	{
		GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001
		Delay_ms(1000);
		GPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010
		Delay_ms(1000);
	}
}
 

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结

LED灯的亮/灭周期主要由软件循环延时和硬件时钟频率共同决定。
本次实验学习了 STM32F103VCT6 单片机的通用 GPIO的基本输入输出功能,受益匪浅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值