HNU-嵌入式系统-实验三(上)_基础内容

一、实验目标

在这里插入图片描述

在这里插入图片描述

(我使用的STM32F103VBT6开发板)

二、实验内容

(一)基础内容

1.尝试“STM32 开发板”下载程序方法之一: MCUISP程序的使用

在这里插入图片描述

解压并打开老师发的“STM ISP下载器MCUISP”
在这里插入图片描述

mcuisp.exe就是烧录程序.hex文件到STM32板子的应用:
在这里插入图片描述
blog.csdnimg.cn/direct/5b7ca8535d7247808e213150db0ea9cb.png)

用““STM32开发板”案例测试”里面的对应功能的.hex文件进行下板烧录测试,测试板子对应模块是否正常,如测试Led灯是否正常:
在这里插入图片描述
在这里插入图片描述

将板子的“COM”口接到自己电脑上(由于是用USB接口接到电脑上,且这个板子用的是CH340G芯片实现USB 转串口功能,所以需要安装CH340驱动程序才能烧录板子)
点击“开始编程”,再操作学习板,按下ISP键的时候,在实现一次RESET键的按下与松开过程,再松开ISP键。(也可先操作学习板,再点击“开始编程”)

2.安装Keil5配置 STM32F1XX开发环境,使其能够完成以下 1),2),3)步内容(遇到问题,需返回本步骤来配置环境)

(1)下载支持 STM32F1 的设备包

在这里插入图片描述

下载后验证:新建工程看看是否有STM32F1xx系列的芯片选择
在这里插入图片描述

(2)安装J-Link 驱动

目的是为了让电脑能够正确识别并与 J-Link 调试器 进行通信,从而对目标设备(如 STM32 等微控制器)进行烧录和调试。
在 Segger 官方网站获取并安装 J_Link 驱动,建议选择历史版本V5.00d;
1)keil5中编译运行生成的.hex文件能使板子正常工作
2)可以进行J_Link 硬件仿真调试
3)可以通过 J_Link 方法下载程序

3.安装“STM32CubeMX”软件安装、并对软件正确设置,步骤如下:

在这里插入图片描述

4.阅读 STM32CubeMX 与其代码模板,获得模板建议,用户应如何规范添加用户程序

用户在下面两行注释中添加代码,下次再用STM32cubeMX生成的代码时,不会将自己写的代码删除
/* xx BEGIN xx /
/
xx END xx */

5.学习自建 STM32CubeMX 工程,完成“流水灯”功能程序。

(1)创建STM32CubeMX工程:

在这里插入图片描述

Debug选择Serial Wire(串行线),表示启用了SWD(串行线调试),这是STM32常用的调试接口。
Timebase Source配置了SysTick 作为时间基准源。SysTick 是一个内置的系统定时器,通常用于生成定时中断,比如FreeRTOS系统滴答时钟。
在这里插入图片描述

High Speed Clock当前选择为 Crystal/Ceramic Resonator(晶体/陶瓷谐振器),表示使用外部高频晶振作为系统的高频时钟源(HSE)。
1) 我们需要初始化LED0~7的接口引脚,配置相关GPIO
查看电路原理图分析:
在这里插入图片描述

上图中的A~H分别与Led0-7的阳极相连
根据原理图,我们需要配置GPIO的引脚PE8~15,使其为推挽输出,且使PB3为1(接上拉电阻)
在这里插入图片描述

2) 配置定时器,使其不依赖delay函数来循环点亮Led灯,而通过中断实现
(我们仅仅是实现计时操作,执行相应的函数,所以用简单的SysTick滴答时钟中断就可以了)
在这里插入图片描述

配置完后填写工程信息后就可以生成代码了
在这里插入图片描述

(2)在Keil中编写代码实现“流水灯”

首先要学会去看懂STM32cubeMX生成的文件,“什么代码放在什么地方”
对应功能的HAL函数文件位置:stm32f1xx_hal_<功能模块>.c
如gpio,tim等等。
而SysTick的HAL函数在stm32f1xx_hal_cortex.c中定义
在这里插入图片描述

这里面定义的是中断用户例程
1) 对SysTick进行配置,如多久执行一次中断函数
在stm32f1xx_hal_cortex.h中查找相应的HAL函数
在这里插入图片描述

这个函数是设置其对应的重装载寄存器的值。
在我的main函数中调用:
在这里插入图片描述

这里有一个问题。重装载寄存器的值与中断函数时间关系是什么?
在这里插入图片描述

由时钟树可知,最后“到达”SysTick(Cortex System timer)的时钟频率是72MHz=72000000Hz,所以当Reload Value = 71999时,T为1ms。
在这里插入图片描述

它是STM32 的 HAL 库(硬件抽象层)中与 SysTick 定时器相关的中断处理函数。会调用 HAL_SYSTICK_Callback() 函数,在stm32f1xx_hal_cortex.c中可以看到其定义是一个弱定义,所以我们可以重新定义这个函数实现我们想要实现的功能
在这里插入图片描述

我们可以在这个回调函数实现计数功能,并且定义一些时间标记,比如设置一个flag_1s的变量,当执行1000次该回调函数时,就将其置为1(说明1s到了),而在while循环里根据Flag_1s的值来执行Func_1s()(经过1s就执行的函数)。通过这个原理我实现了1ms,20ms,1s,1min,1hour的时间函数。
在这里插入图片描述
在这里插入图片描述

所以我想让流水灯的速度为多少,就可以在哪个时间函数里执行。这里我放在Func_1s()函数里(即1s跳一次)
在这里插入图片描述

(3)效果展示:
在这里插入图片描述

6.对所完成的“流水灯”程序,在 Keil 环境下,用软件模拟方法调试程序正确性(通过查看 GPIO 口输出、程序执行时间等)。
点开JLinkGDBServer.exe,配置如下:
在这里插入图片描述
点击OK:
在这里插入图片描述

在Keil5中:
在这里插入图片描述
配置如下,点击setting
在这里插入图片描述
在这里插入图片描述

设置完后需要重新编译一下。
然后Start Debug Session,就可以调试了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值