使用Keil仿真和SaleaeLogic16观察引脚电平变化
使用Keil仿真和SaleaeLogic16观察引脚电平变化
在基于HAL库的RTC日历&时钟&uc_OS-III小试牛刀两个实验中中,在掌握Keil的仿真调试代码功能之外,也学习使用仪器对代码运行进行故障排查和功能调测。
板子:STM32F103C8
移植系统:uc/OS-III
编译工具:Keil&STM32CubeMX
烧录工具:FlyMcu
文章目录
- 使用Keil仿真和SaleaeLogic16观察引脚电平变化
- 一、Keil仿真调试查看波形
- 1. SaleaeLogic16简介
- 2. 实际操作
- 3. 协议分析
- 三、总结
- 四、参考文章
- 五、源代码
一、Keil仿真调试查看波形
这里使用上一次uc_OS-III小试牛刀的程序进行仿真调试,具体调试步骤请参考我曾经的文章:https://blog.csdn.net/ChenJ_1012/article/details/120958528。
而唯一需要添加的步骤是要在MDK-ARM目录下添加一个文件:
创建一个txt文本,插入下列代码后改后缀为.ini:
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然后再再魔法棒中添加项目
运行
因为上次实验使用的是PB0和PB1做输出高电平引脚,频率分别是100ms和500ms,串口一频率500ms发送信息,都与图中波形一一对应。
PB0的while(1)
PB1的while(1)
while (DEF_TRUE){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);OSTimeDlyHMSM(0, 0, 0, 100,OS_OPT_TIME_HMSM_STRICT,&err);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);OSTimeDlyHMSM(0, 0, 0, 100,OS_OPT_TIME_HMSM_STRICT,&err);}USART1的while(1)
while (DEF_TRUE){printf("Welcome to uc/OS-III! \r\n");OSTimeDlyHMSM(0, 0, 0, 500,OS_OPT_TIME_HMSM_STRICT,&err);}添加引脚代码:GPIOB_IDR.0,GPIOB_IDR.1,USART1_SR
1. SaleaeLogic16简介
链接:https://pan.baidu.com/s/1kawlhhgsY8GeIsi66p5NFw
提取码:1234
下载由机智的橙子提供
- Saleae16逻辑分析仪,界面操作简单,易学,易用,是电子开发人员调试、分析的好工具
- Saleae16是将采样出来的实时数据送入电脑内存中,应用压缩算法,深度最高可达10G
- Saleae16可以自动分析多种常用通信协议,直接得到分析数据,其中SaleaeLogic_1.1.15 支持10种协议解释,SaleaeLogic_1.1.16支持17种协议解释,包括: AtmelSWI,Biss ,CAN,DMX-512, I2C, I2S/PCM, JTAG,LIN,Manchester,MDIO,1-Wire,PS/2Keyboard/Mouse,AsyncSerial,Simple Parallel, SPI, UNI/O,USB1.1
- Saleae16采用资源动态复用,3个通道最高采样率100M,6个通道最高采样率50M,9个通道最高采样率32M,16个通道最高采样率16M
- Saleae16使用的USB接口,必须是USB2.0接口
- Saleae16采集的数据可以选择存储, 导出表格,数据显示支持数据显示成为10进制、16进制、二进制、ASCII码,便于进行数据分析和数据比较
- 支持上升沿、下降沿、高电平、低电平等多种触发方式,也可选取多个通道“与逻辑”的关系进行触发选择,方便、实用
- 软件支持多种采集频率和采集深度, 可根据实际应用需求自由结合
- 还支持模拟输出功能,可以对软件本身支持的协议格式进行模拟演试输出
2. 实际操作
进入开始页面后,点击左上角选择Logic16
设置通道,修改触发方式
Analyzers选项
这里使用通道0,1,2
分别将stm32f103c8t6的引脚PB0,PB1,PA9接到通道0,1,2,同时将一个GND接地。
然后设置三个Async Serial
点击Start
波形与keil仿真示波器一致,证明没有问题。
3. 协议分析
UART串口传输的数据被组织成数据包。每个数据包包含1个起始位,5至9个数据位,可选的奇偶校验位和1或1.5或2个停止位,协议如下:
| 1bit | 5-9bit | 0-1bit | 1-2bit |
空闲位:UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平,表示当前线路上没有数据传输。
起始位:开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始。因为总线空闲时为高电平所以开始一次通信时先发送一个明显区别于空闲状态的信号即低电平。
数据位:起始位之后就是要传输需要传输的数据,数据可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位,使用低电平表示‘0’高电平表示‘1’完成数据位的传输。
奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。校验位其实是调整个数,串口校验分几种方式:
停止位:数据结束标志,可以是1位,1.5位,2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备之间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟的机会。停止位个数越多,数据传输越稳定,但是数据传输速度也越慢。
传输方向:即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。
三、总结
本次实验重点在于了解Logic软件的基本原理,以及通过Saleae16配合硬件显示波形图,从而理解UART通信协议。
四、参考文章
一只特立独行的猪: keil仿真和使用示波器调波形
机智的橙子: 使用Keil仿真逻辑仪观察引脚电平变化
慕千雪: 使用Keil仿真逻辑仪观察引脚电平变化
五、源代码
https://github.com/Wattson1128/uC_OS-III
总结
以上是生活随笔为你收集整理的使用Keil仿真和SaleaeLogic16观察引脚电平变化的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: ssm+jsp计算机毕业设计创意产品众筹
- 下一篇: 电阻入门知识