本文主要讲述如何用库函数的方式实现流水灯,以及在keil软件中用示波器观测端口的波形
库函数方法实现流水灯
硬件连线方式跟上一篇 文章的一样
keil新建工程后将以下四个函数加到工程里,并添加路径
使能A时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
用GPIO_Init函数进行初始化
GPIO_InitTypeDef GPIO_InitStructure;//这一段代码放在使能时钟的函数之前
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All; //用到PA0~PA15,16个端口
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
设置所需端口为低电平,并用延时函数进行延时
GPIO_Write(GPIOA,~0x0001); //二进制为0000 0000 0000 0001,"~"为取反号,低电平点亮所以取反
Delay_ms(500); //延迟500毫秒
完整代码如下
#include "stm32f10x.h" // Device header
#include "Delay.h" //引用延时函数头文件
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; //用到PA0~PA15,16个端口
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
while(1)
{
GPIO_Write(GPIOA,~0x0001); //二进制为0000 0000 0000 0001,"~"为取反号,低电平点亮所以取反
Delay_ms(500); //延迟500毫秒
GPIO_Write(GPIOA,~0x0002); //二进制为0000 0000 0000 0010
Delay_ms(500);
GPIO_Write(GPIOA,~0x0004); //二进制为0000 0000 0000 0100
Delay_ms(500);
GPIO_Write(GPIOA,~0x0008); //二进制为0000 0000 0000 1000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0010); //二进制为0000 0000 0001 0000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0020); //二进制为0000 0000 0010 0000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0040); //二进制为0000 0000 0100 0000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0080); //二进制为0000 0000 1000 0000
Delay_ms(500);
}
}
编译结果如下
编译并下载到芯片中,结果 如下
VID_20231016_194945
用示波器观测波形
使用逻辑分析仪前的操作
将晶振设置为8MHZ
勾选/填写以下内容
(Parameter部分根据不同的芯片填写,这里使用的是STM32F103C8,设置完点击ok)
编译了程序之后
点击start/stop debug Session来显示逻辑分析仪菜单
打开逻辑分析仪
使用逻辑分析仪观测波形
打开后点击setup
添加要观测的端口,再回车键,这里添加的是PA1,双击添加的端口名称,设置Display Type为bin
以此类推,这里添加了PA0~PA7八个端口
点击运行
运行一段时间后点击左上角停止运行
(将鼠标光标放在图形处,滑动光标即可任意放大缩小图形)
最后得出结果如下:
由图看出,PA0~PA7在轮流处于低电平,本次实验为低电平有效,即八个端口的led在轮流亮,流水灯操作成功。