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

目录

一、下载标准库

二、Keil创建工程

三、编写代码

1、主函数

2、Delay函数

四、电路连接

五、烧录程序

六、观察管脚的时序波形


一、下载标准库

下载地址:STM32 Standard Peripheral Libraries - STMicroelectronics

标准库模板种的文件工程分布如下:

STM32工程文件夹主要包含以下几个文件夹:

•Library: 放置库文件,包含驱动程序和算法等。

•Listings: 放置汇编列表文件(.lst)。这些文件记录了编译过程中产生的汇编代码。

•Objects: 放置目标文件(.o文件),这些文件是编译源代码(.c文件)后的结果,包含机器码等。

•Start: 放置启动文件startup_stm32f10x_xx.s,包含系统时钟配置、堆栈设置、中断向量表等初始化代码。

•User: 用户代码文件夹,放置用户自己编写的源代码(.c文件)。

二、Keil创建工程

1、空文件夹新建工程,选择STM32F103C8系列单片机。

 2、在Keil中新增文件组并对其命名。

 3、依次将三个文件下的所有文件添加到刚刚创建的文件组中。

 4、点击魔法棒,添加文件路径。

三、编写代码

1、主函数

#include "stm32f10x.h"                  
#include "Delay.h"

//芯片初始化
int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
//设置推挽输出模式
	GPIO_Init(GPIOC, &GPIO_InitStructure);
//	GPIO_SetBits(GPIOC, GPIO_Pin_13);
	GPIO_ResetBits(GPIOC, GPIO_Pin_13);
	
	while (1)
	{
		GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001
		Delay_ms(1000);
		GPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010
		Delay_ms(1000);
		GPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100
		Delay_ms(1000);
  	    GPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000
		Delay_ms(1000);
	}
}

2、Delay函数

(1)Delay.h:

#include "stm32f10x.h"
 
void initSysTick(void);
void Delay_us(u32 xus);
void Delay_ms(u32 xms);

(2)Delay.c:

#include "Delay.h"
 
/**
 * 功能:SysTick定时器初始化函数
 * 参数:None
 * 返回值:None
 */
void initSysTick(void)
{
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); 
    //设置时钟源8分频
    SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;            
    //使能中断
    SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;             
    //开定时器
    SysTick->LOAD = 9;                                    
    //随意设置一个重装载值
}
/**
 * 功能:微秒级延时函数
 * 参数:xus :具体延时时间  (单位:微秒)
 * 返回值:None
 */
void Delay_us(u32 xus)
{
    SysTick->LOAD = 9 * xus;                                    
 //计9次为1us,xus重装载值要*9
    SysTick->VAL = 0;                                           
 //计数器归零
    while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));       
 //等待计数完成
}
/**
 * 功能:毫秒级延时函数
 * 参数:xms :具体延时时间  (单位:毫秒)
 * 返回值:None
 */
void Delay_ms(u32 xms)
{
    SysTick->LOAD = 9000;                                      
 //计九次为1us,1000次为1ms
    SysTick->VAL = 0;                                          
 //计数器归零
    while (xms--)
    {
        while (!(SysTick->CTRL&SysTick_CTRL_COUNTFLAG_Msk));    
 //等待单次计数完成
    }
}

进行编译: 

四、电路连接

五、烧录程序

1、点击魔法棒,选择生成HEX文件。

2、打开FlyMcu,进行程序烧录,得到结果如下:

六、观察管脚的时序波形

在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。

1、我们点开魔术棒,在’Target’中修改晶振为8.0MHZ.

2、点击Debug,进行一些配置修改。

3、打开逻辑分析仪,点击“Set Up”选项。

 4、在弹出的窗口中,新建观察引脚。在框中输入(PORTA.X),想观察几号引脚,X就填几。添加完成后,一定要把每个的“Display Type"改成比特。

5、左上角点击全速运行程序,得到如下波形:

6、结论

据观察,波形是连续变化的,PA0由低变高后,PA1紧接着变成低电平。低电平持续时间为1s。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值