基于上一篇博客STM32F103C8T6移植uCOS(HAL库)和STM32CubeMX HAL库 :RTC时钟
(1)Target界面中,选择跟正确的晶振大小,我使用的是8MHz的外部晶振。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。
(2)Debug页的设置:
一般情况下这样设置后就可以调试出波形了,但是这次出现了错误:error 65: access violation at 0x40023800 : no 'read' permission
查阅相关资料,根本原因是:map地址空间权限映射有问题。部分地址空间没有读写的权限,造成程序不能自动运行。有两个解决办法:
map 0x40000000, 0x40007FFF read write // APB1
map 0x40010000, 0x400157FF read write // APB2
map 0x40020000, 0x4007FFFF read write // AHB1
map 0x50000000, 0x50060BFF read write // AHB2
map 0x60000000, 0x60000FFF read write // AHB3
map 0xE0000000, 0xE00FFFFF read write // CORTEX-M4 internal peripherals
然后再调试就不会有问题了。
(1)点击Debug,进入调试界面:
(2)选择逻辑分析仪:
(3)选择要观察的引脚:
①点击Setup Logic Analyzer
②添加要观察的引脚:
输入PORTX.xx(X为A.B…;xx为引脚号,比如:PORTB.14)然后按回车;
输入USARTx_SR(x为数字)然后回车
同样,放大竖线的部分看看,是由很多条宽度不完全相同的波形组成,:
链接:https://pan.baidu.com/s/1ycY6O-N0oK-Wj74uQRn0fg
提取码:0526
选择合适的版本安装即可,安装时一直next就好了(当然改改路径最好了),我安装的是1.1.34的。
在安装软件的同时,驱动程序已经被注册到系统了了,当插入 SALEAE 16 逻辑分析仪后就可以自动安装安装驱动。
打开界面如下图,软件界面基本是左中右的布局,左边主要是采集和显示设置,右边是分析和解析设置,中间是波形显示区域。
无逻辑分析仪的时候显示 Disconnected,左边是8个通道,使用的时候根据硬件连接选择对应通过进行配置,中间部分是显示我们逻辑波形的区域,右边是添加一些协议数据格式,数据分析区域。
点 Start Simulation,可以在波形区域模拟显示出一些软件生成的数据,如果您设置了解析(解析设置方法在下面讲),可以根据所设置的协议,生成一些符合协议解析要求的模拟数值。
由于默认的演示模式是 8 通道的,我们可以设置成 16 通道的。
点击左上角的符号,之后弹出选择演示的设备:
3.1 连线
GND----GND
PA9(串口)-----CH0(可以自己随便选通道)
PB15(LED)-----CH1
PB14(LED)----CH2
经硬件插到电脑上后,start simulation会变为start。
3.2 Analyzerss设置
添加3个Async Serial(波特率设为115200,与程序对应)
点击左上角start的右边的小三角设置好通道参数:主要是时间
3.2 开始观测波形
点击start后会弹出一个框,等进度条走完后就可以看到波形了
在右下角显示着串口发送的数据,
Channel 0 观测的是 USART1 串口信号波形,可见,电平变化周期是 2s ;
Channel 1 观测的是 PB15 引脚信号波形,可见,电平变化周期是 3s (亮 0.5s 灭 2.5s );
Channel 2 观测的是 PB14 引脚信号波形,可见,电平 0.5s 变化一次(亮 0.5s 灭 0.5s )。
与之前的 keil 仿真观测结果相比较可以看出,二者的波形基本对应一致,且均符合代码中设置的电平变化要求。
可以看到接串口的通道的输出内容(中文不行)。
UART 使用的是异步串行通信。
异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。
串口通信协议数据传送时,每一个字符为 10 位(1 个起始位,7 个数据位,1 个校验位,1 个结束位):
起始位—先发出一个逻辑“ 0 ”信号,表示传输字符的开始;
数据位—可以是 5~8 位逻辑“ 0 ”或“ 1 ”;
校验位—数据位加上这一位后,使得“ 1 ”的位数应为偶数(偶校验)或奇数(奇校验);
停止位—它是一个字符数据的结束标志。可以是 1 位、1.5 位、2 位的高电平;
空闲位—处于逻辑“ 1 ”状态,表示当前线路上没有资料传送。
从逻辑分析仪的波形可以看到,每一个字符为 10 位,有一个逻辑“ 0 ”的起始位,7 位数据位,1 为奇偶校验位,1 位高电平停止位,1 为处于逻辑“ 1 ”的空闲位。其中的数据位:1101000 即十六进制数 0x68。
串口波形符合串口通信的数据传输格式。
串口通信协议数据传送速率用波特率来表示,即每秒钟传送的二进制位数。
数据的波特率为 1s 传送的码元符号的个数。
从逻辑分析仪的波形可以看到,实际传输一个比特时间为 8.75 us,而之前设置的波特率为 115200,即理论上传输一个比特时间为 1/115200=8.68 us,可见串口通信的实际传输速率与理论相近,只存在一点点误差,可能是设备问题造成的。
在进行仿真调试时,最开始没有设置debug.ini的时候波形不太好调出来(不能全速运行,想得到波形恐怕得点几万次,点到手废),在注意到左下角的错误后,在网上查找了相关资料,引入了debug.ini文件后就能完美得到波形了。
STM32F4 MDK5软件仿真 error : no ‘read’ permission - 0111always - 博客园 (cnblogs.com)
https://blog.csdn.net/m0_58892312/article/details/121411070