0 前言
最近在做FreeRTOS相关的实验,通过使用逻辑分析仪观察两个变量的值的变化,来观察系统阻塞延时工作过程。
本次使用的是STM32F103C8T6最小系统板,用STM32CubeMX软件配置引脚,在Keil5软件中编写代码,使用J-Link烧录及硬件仿真。
1 STM32CubeMX软件配置
在STM32CubeMX中,SYS–Debug–选择Trace Asynchronous Sw
能看到右边的引脚配置多了3个Debug引脚
引脚 | 功能 |
---|---|
PB3 | SWO 串行输出 用于打印调试信息 |
PA13 | SWDIO 串行线调试接口输出 |
PA14 | SWCLK 串行线时钟 |
一般的调试只需要接SWDIO和SWCLK即可,但本次实验为了使用Keil5的逻辑分析仪,必须要接SWO,以便从MCU上获取各个数据。
完成之后,还需要配FreeRTOS相关的中间件,都完成后点击Generate Code,并在Keil5中编写相关逻辑代码。这里就不放全部代码了,代码主要逻辑就是创建两个任务,每个任务中分别有一个全局变量flag1和flag2,让这两个变量间隔2ms翻转一次。
2 硬件连接
最小系统板引脚 | J-Link引脚 |
---|---|
3V3 | 3V3及Vref |
GND | GND |
PB3 | SWO |
PA13 | SWDIO |
PA14 | SWCLK |
3 Keil5设置
3.1
按如下操作进入到J-Link的设置界面
在Debug选项卡内,Port选择SW方式,其余默认
Trace选项卡
勾选上Enable。Core Clock这里输入你的MCU工作频率,SWO Settings的CoreCLK这里,把Autodetect这个勾去掉,手动输入分频系数,我实测Clock在6MHz以下能正常工作。
Trace Events这一列的复选框都不勾选。
3.2 Selected SWO Clock not supported问题解决
如果弹出了Selected SWO Clock not supported错误提示框,则说明你的SWO Clock设置过高
解决方法是将Core Clk(分频系数)这里调大点,即让SWO Clock变小点,再尝试。
4 添加逻辑分析仪
启动调试,在View选项卡选择Analysis Windows – Logic Analyzer
将待查看的变量flag1和flag2添加到逻辑分析仪
在逻辑分析仪的变量处右键,改为Bit
让程序继续运行,能看到flag1和flag2的翻转效果