基于keil仿真波形分析以及逻辑分析仪真实波形抓取

目录

 

一、keil5仿真

1.1 新建debug.ini文件

1.2 打开keil小魔法棒

1.3 进入调试界面

1.4 波形结果

二、逻辑分析仪真实抓取分析

2.1 插入逻辑分析仪

2.2 实物连线图

2.3 抓取串口数据

2.4 抓取LED0,PB0的数据

2.5 抓取LED1,PB1的数据

2.6 抓取I2C协议

2.7 抓取SPI协议

三、总结


一、keil5仿真

分析背景:基于stm32cubemx下移植的uC/Os操作系统,并实现三个task任务,两个LED任务加上串口输出任务。

具体工程可查看博客

基于stm32cubemx移植uC/OS-III操作系统_Laul Ken-Yi的博客-CSDN博客

1.1 新建debug.ini文件

新建文本文件

输入以下debug配置,否则keil仿真会报错

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

并且另存为工程目录下.ini文件,切记将保存类型改成所有文件

1.2 打开keil小魔法棒

处将刚刚创建的debug文件加入。

1.3 进入调试界面

设置要观察对应的引脚,在前面博客提到的使用串口1,PB0,PB1口。

  • 知识点:

GPIOB_IDR是GPIO的IDR寄存器功能为读对应的I/O口的状态:

如:GPIOA->IDR & 0x0001 即为 PA-1的电平状态,IDR寄存器的16位对应了该GPIO的P0-P15

1.4 波形结果

分析:先看串口输出,一个格子对应1s当经过两个格子即2s串口输出一次信号,对于PB0,在工程中设置的是1s亮1s熄灭,由仿真图可以看出刚好是1s为高电平,1s为低电平。对于PB1,通过数格子可以看到是3s一次高电平,3s一次低电平,与工程中设置3s一次对应。

串口详情:

 

二、逻辑分析仪真实抓取分析

2.1 插入逻辑分析仪

可以看到标题处变成了connected,start simulation也变成了start。

设置成下降沿输出

2.2 实物连线图

2.3 抓取串口数据

将对应管道夹道对应的管脚

可以看到串口真实输出波形与仿真波形一致,它的间隔也是接近于2s,虽然它是1.999s有1ms的差距。

2.4 抓取LED0,PB0的数据

 可以看出它的高电平低电平持续时间是1s钟,它的频率是0.5HZ,T=2s,占空比为50%,与仿真波形完全吻合。

2.5 抓取LED1,PB1的数据

可以看出它的高电平和低电平持续时间是3s钟,有一定的误差这里是3.001s,有1ms的偏差,占空比为50.02%,T=6S,频率为0.1667HZ。

2.6 抓取I2C协议

基于I2C的AHT20温度采集工程。具体过程参考博客:基于I2C的AHT20温度采集器以及基于SPI协议OLED显示_Laul Ken-Yi的博客-CSDN博客 

 这里设置要分析的I2C协议,这样可以设计想通过哪些通道观察对应的SDA和SCL通道。

逻辑分析仪与电路板接线图:

逻辑分析仪开发板
CH0PB8(SCL)
CH2PB9(SDA)
GNDGND
  • 结果:

由图中绿色小点代表信号开始采集,红色代表结束

当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始。当 SCL 是高电平时 SDA线由低电平向高电平切换,表示通讯的停止。

对于I2C协议前面有所提到,当SCL为高电平时,SDA才有作用, 每一个上升沿读取一个bit,则第一个波形对应的二进制信号为01110001,而最后一个是I2C协议的一个应答信号,当SDA为低电平时表示ACK希望继续接收信号,当SDA为高电平表示NAK表示不接收信号了。

但是相比之前博客,在真实抓取过程中出现了毛刺现象

这个毛刺是由于悬空时并且还插着杜邦线所造成的容性串扰(串饶是两条信号线之间的
耦合、信号线之间的互感和互容引起线上的噪声。)但在这里表示的是ACK信号。

2.7 抓取SPI协议

基于SPI的OLED显示工程。具体过程参考博客:基于I2C的AHT20温度采集器以及基于SPI协议OLED显示_Laul Ken-Yi的博客-CSDN博客 

逻辑分析仪与电路板接线图:

逻辑分析仪开发板
CH0PB15(MOSI)
CH2PB13(CLK)
CH3PB12(NSS)
GNDGND

Analyzers选择SPI协议

  • 结果:

当CH3即NSS为低电平时SPI协议开始工作,而当CH2即时钟信号在上升沿则MOSI和MISO同步开始发送和采集信号。占空比为67.09%,频率为101.3kHZ。

三、总结

通过对波形的仿真与通过逻辑分析仪抓取最真实的波形,更加深层次的理解了协议的工作原理,可以看出仿真波形与实际波形基本是一致的,心里还是挺高兴的,一次就成功了,加强了自己的动手能力,以及查阅资料的能力。

参考文献:零死角玩转 STM32F103—指南者.pdf

### DS1302仿真方法与工具 DS1302是一种实时时钟芯片,广泛应用于嵌入式系统中用于时间记录功能。为了实现其仿真实验或测试环境,可以采用多种软件工具和硬件平台来完成。 #### 软件仿真工具 常用的仿真工具有Proteus、Keil以及一些基于FPGA开发板的综合设计环境。其中Proteus支持对DS1302的功能模拟,在电路图上可以直接观察到时间和日期的变化情况[^1]。通过配置微控制器单元(MCU),例如51单片机或其他兼容I/O接口标准的处理器模型,能够轻松搭建起虚拟实验场景并验证通信协议是否正常工作。 对于更深入的研究或者定制化需求,则可借助ModelSim等HDL级建模器来进行RTL级别的行为分析;另外还有MATLAB/Simulink这样的高级算法框架也可以用来构建更高层次上的抽象表示形式以便于理解整个系统的运作机制[^2]。 #### 硬件辅助调试手段 除了纯软件方式外,还可以利用实际物理设备配合逻辑分析仪抓取数据流波形特征从而判断交互过程中的细节问题所在之处。比如使用Saleae Logic Analyzer系列便携式数字信号捕捉装置连接目标板卡之后即可实时监测SPI总线上传输的具体字节序列及其对应的时间戳信息[^3]。 此外还有一种折衷方案就是购买专门针对此类应用场合而优化过的评估套件产品(如Maxim Integrated官方提供的EV kit),它们通常已经集成了必要的外围元件并且预先写好了驱动程序代码样例供开发者快速入门学习之用[^4]。 ```c // 示例:初始化DS1302并与MCU建立通讯链接 (伪代码) void init_DS1302(){ // 设置控制端口方向为输出模式 pinMode(clockPin, OUTPUT); pinMode(dataPin ,OUTPUT); } byte readByteFromDS1302(){ byte result=0; for(int i=0;i<8;i++){ digitalWrite(clockPin,HIGH);//拉高时钟脚触发读操作 delayMicroseconds(1); bitSet(result,i,digitalRead(dataPin));//获当前位状态存入变量result中 digitalWrite(clockPin,LOW); //下降沿结束本次循环等待下一个周期到来再继续处理下一位的数据传输动作直到全部接收完毕为止。 } return result; } ``` 上述C语言片段展示了如何在一个典型的Arduino风格环境中设置GPIO引脚并向外部器件请求一个字节长度的信息返回值作为函数调用的结果输出给后续环节进一步解析计算所用[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值