技术探索

STM32实验笔记

2026-10-18 #STM32#嵌入式#笔记#Keil

Keil5 调试与仿真

来源:实验课程一

软件仿真

配置:

Debug页面:

  • DARMSTM.DLL:-pSTM32F103ZE

  • TARMSTM.DLL:-pSTM32F103ZE

操作:

  1. 修改Debug配置

  2. 再次编译

  3. 进入Debug

  4. 使用逻辑分析页面添加想要查看波形的引脚。例如,我想查看PE5引脚电平随时间的变化,就需要在配置页面添加以下代码:

1
(PORTE & 0x00000020) >> 5
表达式解析

(PORTE & 0x00000020) >> 5
这段代码的含义是提取并转换 GPIO 引脚 PE5(Port E, Pin 5)当前的电平状态(0 或 1),以便在波形监视工具中清晰显示。

分步拆解:

PORTE:

代表 Port E 端口的寄存器值,其中包含了该端口所有 16 个引脚(Pin 0 ~ Pin 15)的高低电平状态。

& 0x00000020(按位与掩码):

0x00000020 换算成二进制是 0000 … 0010 0000,其第 5 位(从 0 开始数)为 1。

这一步通过“按位与”操作,屏蔽并清零了其他所有引脚的状态,只单独留下 PE5 引脚的原始数据。

>> 5(右移 5 位):

把刚才过滤出来的第 5 位数据向右平移 5 位,将其移动到最低位(第 0 位)。

经过这一步处理后,整个表达式的值就会变成纯粹的 0(代表低电平) 或 1(代表高电平),可以直接被波形工具识别并绘制成高低起伏的方波。

实物仿真

配置:

Debug页面:

操作:

  1. 修改Debug配置

  2. 编译

  3. 烧录

  4. 按下核心板上的复位键

GPIO 控制输出

来源:实验课程一

配置:

System Core >> GPIO:
GPIO Output Level: Low (根据原理图选择相应的电平)
GPIO mode: Output Push Pull
GPIO pull-up/pull-down(是否启用上/下拉电阻): No pull-up and No pull-down
User label 一般为了好记好使会给改一个好写的名字

main.c文件:P58

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(void)
{
uint32_t systick_i; //定义变量

while(1)
{
systick_i++;

if(systick_i % 2 == 1)
{
HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin); //翻转引脚电平
}

HAL_Delay(1000);
}
}
代码说明

uint32_t systick_i;
定义了一个局部变量,类型为 uint32_t。

HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
翻转 LED 引脚电平的(TogglePin 可以让 LED 状态取反,使用 WritePin 点亮会使代码繁杂)。

操作:

  1. 在MX中选择所需引脚,选择GPIO_Output模式

  2. 修改配置

参考阅读: 课本第四章P45 寄存器:P54

中断控制器 判断按键

名词翻译:

上升沿:电平由低到高上升为上升沿
下降沿:电平由高到低下降为下降沿

疑问:

为什么不采用轮询方式(在循环中添加电平判断)?

因为这样做会占用大量CPU。

配置:

评论
分享

评论