当前位置: 首页 > article >正文

深圳大学-智能网络与计算-实验二:STM32编程实验

实验目的与要求

  1. 理解定时器的工作原理。
  2. 掌握定时器库函数的使用。
  3. 完成定时器程序编写。
  4. 掌握定时器程序调试以及寄存器查看

方法,步骤

1。STM32 硬件的准备与连接
2。STM32 代码下载与调试
3。 实验现象记录及描述

实验过程及内容

1. 连接设备

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

2. STM32 代码下载与调试

(1) 打开实验代码文件夹中的TIMER.eww工程
在这里插入图片描述
(2) 使用IAR开发环境打开电子时钟实验程序并阅读readme文件。
在这里插入图片描述
(3) 阅读代码
阅读main.c文件,这个代码的功能是通过设置定时器,使两个LED(D3和D4)交替闪烁,定时器每隔1秒触发一次,在定时器中断服务程序中修改 led_status 的值,主循环根据 led_status 的值来控制 D3 和 D4 的亮灭。
在这里插入图片描述
阅读time.c文件,这段代码配置了STM32的定时器TIM3,使其能够产生定时中断。首先,timer3_init() 函数初始化定时器3,设置定时器的重装载值 (period) 和预分频值 (prescaler),从而控制定时器的溢出时间。当定时器到达设定的溢出时间时,会触发一个中断。TIM3_IRQHandler() 函数是定时器3的中断服务程序,当中断发生时,清除中断标志位并翻转 led_status,实现LED状态的切换。通过这种方式,定时器定时触发中断,控制LED的亮灭状态。
在这里插入图片描述
阅读delay.c文件,这段代码定义了一个延时函数 delay_count,接受一个 uint32_t 类型的参数 times 作为计数器,然后在一个嵌套的 while 循环中实现延时功能。外层的 while 循环根据 times 的值循环执行内部的延时,内部的 while 循环根据 temp 的值进行延时计数,当 temp 递减至0时,结束延时。
在这里插入图片描述
阅读key.c文件,这段代码首先包含了按键初始化函数 key_init 和按键状态获取函数 get_key_status。在 key_init 函数中,通过配置 GPIO 相关参数来初始化按键管脚,包括开启相应 GPIO 外设时钟、设置引脚的输出类型、模式、上拉模式和速率等,以确保按键正常工作。而 get_key_status 函数则用于读取各个按键管脚的状态,判断按键是否被按下,并将按键状态以位掩码的形式返回,方便后续处理。
在这里插入图片描述
阅读led.c文件,这段代码包含了LED初始化函数 led_init、关闭LED函数 turn_off、打开LED函数 turn_on 以及获取LED状态函数 get_led_status。在 led_init 函数中,配置了GPIO引脚的输出模式、类型、速度和上下拉等参数,使得LED引脚正确初始化。turn_off 和 turn_on 函数根据传入的参数控制对应LED引脚的电平状态,实现关闭和打开LED的功能。get_led_status 函数用于读取各个LED引脚的状态,并将状态以位掩码的形式返回,以便获取LED的当前状态。这些函数共同实现了对LED的控制和状态获取功能。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4) 编译代码查看程序是否有误
运行后,发生大量报错,发现是没有License
(5) 查看破解视频,破解软件,从而激活License
在这里插入图片描述
在这里插入图片描述
(6) 给程序打上断点,执行程序,通过watch窗口查看led_status参数的状态。
在这里插入图片描述
在这里插入图片描述
(7) 执行程序,运行至断点处,通过register窗口查看TIM3_CNT数值变化
在这里插入图片描述

3. 实验现象记录及描述

D3、D4 灯一秒转换一次状态,且两灯的状态保持相反。
在这里插入图片描述
在这里插入图片描述
灯(交替)闪烁的原理:定时器定时触发中断,中断服务程序控制LED状态的变化,LED控制函数根据状态控制LED的亮灭,从而实现了LED灯的交替闪烁功能。
修改代码为如下:
在这里插入图片描述
观察到现象:灯交替闪烁的频率加快。
闪烁频率加快原理解释:函数参数二个参数是预分频值,原来为16800-1,现在变为2000-1。预分频值决定了定时器时钟的频率。减小预分频值会导致定时器计数的速度增加,从而导致 LED 闪烁的频率加快。

实验结论

STM32定时器通过预分频器和自动重装载寄存器 (ARR) 生成定时中断。预分频器决定了定时器计数的速度,而ARR决定了计数器溢出的时间。通过改变这两个参数,可以改变中断的触发频率,进而改变LED的闪烁频率。

心得体会

  1. 通过本次实验,我学习了定时器的基本工作原理,了解到了定时器是如何计时以及如何与其他系统组件协作。
  2. 同时我还学会了如何使用定时器的库函数,这些函数提供了方便的接口,使得在嵌入式系统中实现时间相关功能变得更加高效和简单。
  3. 除此之外,我还学会了如何调试定时器程序以及查看相关寄存器的值。

http://www.kler.cn/a/518175.html

相关文章:

  • 图漾相机——C++语言属性设置
  • 剑指 Offer II 008. 和大于等于 target 的最短子数组
  • mamba论文学习
  • AI软件外包需要注意什么 外包开发AI软件的关键因素是什么 如何选择AI外包开发语言
  • Linux之详谈——权限管理
  • 记录 | 基于Docker Desktop的MaxKB安装
  • 【PyCharm】将包含多个参数的 shell 脚本配置到执行文件来调试 Python 程序
  • Linux多路转接之epoll(补充)
  • 网络系统管理Linux环境——智慧运维平台部署(乐维LW)
  • 学习第七十五行
  • Command Center AI
  • BME280一款测量温度、湿度和气压的环境传感器
  • 【Nomoto 船舶模型】
  • 基于Arduino的厨房安全检测系统:守护家庭的智能助手
  • StarRocks 3.4 发布--AI 场景新支点,Lakehouse 能力再升级
  • MiniMax 稀宇科技
  • Go的内存逃逸
  • Redis数据库笔记——数据结构类型
  • Android程序中使用FFmpeg库
  • 大模型语料库的构建过程 包括知识图谱构建 垂直知识图谱构建 输入到sql构建 输入到cypher构建 通过智能体管理数据生产组件
  • 【论文+源码】Difformer在文本生成嵌入空间上增强扩散模型
  • RV1126画面质量一:视频基础
  • 【Linux系统】—— 动静态库
  • ORB-SLAM2源码学习:Initializer.cc(13): Initializer::ReconstructF用F矩阵恢复R,t及三维点
  • 【力扣Hot 100】矩阵1
  • go replay流量重放[详细教程]