基于外设库的流水灯及通过keil观察GPIO输出波形
(1)标准外设库的下载及使用
下载:https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries.html
下载后将相关文件添加到工程里:
鼠标右键点击Target,添加Group,然后再左键点击New Group两次,重命名,如user。
右键点击user,点击Add Existing Files to Group,找到安装的固件库位置,如下图,
找到以下文件,添加到user里
同理,创建其他组进行添加,如下图
此时由于文件太多,在对应文件夹里可通过一直按ctrl,鼠标点击对应文件,可一次性将对应文件添加进Group里。
然后点击魔术棒,找到c/c++板块,在该板块下找到Include Paths,点击旁边的省略号。
然后点击出现窗口里红色x旁边的类似截屏的方框,点击出现的一行空格旁的省略号,将固件库的文件夹位置找到,添加
(2)外设库方式流水灯
延时文件:
#include "stm32f10x.h"
/**
* @brief 微秒级延时
* @param xus 延时时长,范围:0~233015
* @retval 无
*/
void Delay_us(uint32_t xus)
{
SysTick->LOAD = 72 * xus; //设置定时器重装值
SysTick->VAL = 0x00; //清空当前计数值
SysTick->CTRL = 0x00000005; //设置时钟源为HCLK,启动定时器
while(!(SysTick->CTRL & 0x00010000)); //等待计数到0
SysTick->CTRL = 0x00000004; //关闭定时器
}
/**
* @brief 毫秒级延时
* @param xms 延时时长,范围:0~4294967295
* @retval 无
*/
void Delay_ms(uint32_t xms)
{
while(xms--)
{
Delay_us(1000);
}
}
/**
* @brief 秒级延时
* @param xs 延时时长,范围:0~4294967295
* @retval 无
*/
void Delay_s(uint32_t xs)
{
while(xs--)
{
Delay_ms(1000);
}
}
对应LED文件:
#include "stm32f10x.h"
#include "Delay.h"
void LED(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO_InitTypeDef类型的结构体
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); //开启LED相关的GPIO外设时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; //选择控制的GPIO引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置引脚模式为通用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置引脚速率为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //调用库函数,初始化GPIO
while(1)
{
GPIO_Write(GPIOB, ~0x0001);
Delay_ms(1000);
GPIO_Write(GPIOB, ~0x0002);
Delay_ms(1000);
GPIO_Write(GPIOB, ~0x0004);
Delay_ms(1000);
}
}
(3)示波器观察
点击Debug,点击示波器,出现下图界面
点击setup,同样点击方框,然后直接输入GPIOx_IDRy[x,y分别为对应端口和对应引脚,如输入GPIOB_IDR0,则在IDR后出现&0x00000001(即引脚0对应地址)],然后选择type为bit。
然后点击run,运行。
结果如下: