使用Keil仿真和SaleaeLogic16观察引脚电平变化

在基于HAL库的RTC日历&时钟&uc_OS-III小试牛刀两个实验中中,在掌握Keil的仿真调试代码功能之外,也学习使用仪器对代码运行进行故障排查和功能调测。

  1. 练习使用示波器去观察LED输出电平和串口通信的波形,分析故障;
  2. 分别使用Keil虚拟仿真逻辑仪和 真实逻辑仪(SaleaeLogic16)抓取LED输出电平和串口通信的波形,进行协议分析。

板子: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)

  while (DEF_TRUE){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);OSTimeDlyHMSM(0, 0, 0, 500,OS_OPT_TIME_HMSM_STRICT,&err);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);OSTimeDlyHMSM(0, 0, 0, 500,OS_OPT_TIME_HMSM_STRICT,&err);}

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. 无校验(no parity)
  2. 奇校验(odd parity):如果数据位中“1”的数目是偶数,则校验位为“1”,如果“1”的数目是奇数,校验位为“0”。
  3. 偶校验(even parity):如果数据为中“1”的数目是偶数,则校验位为“0”,如果为奇数,校验位为“1”。
  4. mark parity:校验位始终为1(不常用)。
  5. parity:校验位始终为0(不常用)。

停止位:数据结束标志,可以是1位,1.5位,2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备之间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟的机会。停止位个数越多,数据传输越稳定,但是数据传输速度也越慢。

传输方向:即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。

三、总结

本次实验重点在于了解Logic软件的基本原理,以及通过Saleae16配合硬件显示波形图,从而理解UART通信协议。

四、参考文章

一只特立独行的猪: keil仿真和使用示波器调波形

机智的橙子: 使用Keil仿真逻辑仪观察引脚电平变化
慕千雪: 使用Keil仿真逻辑仪观察引脚电平变化

五、源代码

https://github.com/Wattson1128/uC_OS-III

使用Keil仿真和SaleaeLogic16观察引脚电平变化相关推荐

  1. 使用Keil仿真逻辑仪观察引脚电平变化

    一.keil仿真和使用示波器调波形 (一)仿真设置 Debug的设置,点击魔法棒进行配置 (二)调试 1.点击Debug进行调试 2.选择逻辑分析仪: 3.设置要观察的引脚 添加引脚 快捷方式添加引脚 ...

  2. 基于stm32移植uC/OS-III以及使用Keil仿真和逻辑分析仪抓取波形

    文章目录 一. 认识uC/OS-III 二. 将uCOSIII源码移植到STM32F103C8T6 1. 使用CubeMX建立STM32F103C8T6HAL库 2. 准备工作 (1)获取uC/OS- ...

  3. keil仿真逻辑分析仪观察引脚变化

    一.Keil仿真观察引脚 打开μc/os工程,点击LogicAnalyzer 添加引脚 在MDK-ARM下创建一个.ini文件 map 0x40000000, 0x40007FFF read writ ...

  4. keil仿真||示波器的使用

    文章目录 一.keil仿真调试 1.仿真设置 2.调试 3.运行 二.示波器使用 三.总结 参考链接 一.keil仿真调试 1.仿真设置 ①点击魔法棒进行设置 设置后直接进行调试,会报错 error ...

  5. keil仿真和使用示波器调波形

    keil仿真和使用示波器调波形 一.keil仿真和使用示波器调波形 (一)仿真设置 (二)调试 二.使用示波器查看 (一)软件下载 (二)认识软件 (三)用Logic显示波形 三.总结 四.参考资料 ...

  6. 树莓派-语音聊天机器人+语音控制引脚电平高低

    最近和几位本学院的研究生师兄师姐参加研究生电子设计大赛,自己也来折腾下之前没有搞完的语音控制小车.恰巧自己负责的是语音控制这部分,折腾了几天也差不多搞定啦-把自己的折腾套路总结一下,给一起折腾的小伙伴 ...

  7. 简单操作实现Siri控制ESP8266引脚电平--1

    简单操作实现Siri控制ESP8266引脚电平--1(本章) 简单操作实现Siri控制ESP8266引脚电平--2 资料下载:https://pan.baidu.com/s/12MXNEOhVo3OR ...

  8. 简单操作实现Siri控制ESP8266引脚电平--2

    简单操作实现Siri控制ESP8266引脚电平--1 私信有时候没看到,新建了一个QQ交流群,有想咨询的朋友可以在群里问哈 简单操作实现Siri控制ESP8266引脚电平--2(本章) 资料下载:ht ...

  9. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)...

    :由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...

最新文章

  1. gridview列 数字、货币和日期 显示格式
  2. java项目close wait_服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
  3. windows中wnmp设置nginx启动脚本
  4. 2017年对口招生c语言及答案,2017年计算机专业对口考试试卷及答案.doc
  5. 修改mysql端口以及出现的问题
  6. Linux下解决MySQL无法远程连接问题(转)
  7. 高中数学解题方法技巧之秒杀解三角形难题(图文讲解)
  8. ios持续化集成-fastlane+jenkins+蒲公英+alfred+Webhook通知企业微信
  9. 会员等级进度功能前端实现
  10. win10亮度无法调整(Win10无法调节亮度)
  11. Vue双向绑定失效 v-model
  12. C++中的delegate
  13. Cython基础--Cython的类型
  14. 内存屏障什么的(经典)
  15. Windows11中文原版镜像系统ISO下载
  16. R:parse函数和eval函数解析字符串为命令并运行
  17. 苹果拍照怎么显示地点和时间_内部秘密中医体质辨识与调理师证报名时间怎么报考考试地点...
  18. vscode中检查代码插件:flake8
  19. 戴尔游匣G15怎么样?不看完答案你都不知道~
  20. 计算机用户账户包括哪些组成部分,2016年职称计算机WindowsXP考前押题及答案4

热门文章

  1. Supervisor(一)
  2. 主梁弹性模量计算_弹性模量计算
  3. c语言程序设计3000字论文,考核体系毕业论文提纲范文 c语言和c语言程序设计方面有关论文范文文献3000字...
  4. 企业应用区块链的正确姿势
  5. js---开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适(身高:cm)
  6. NVIDIA显卡硬编码调研
  7. 永磁同步电机三相等效电路图_同步电动机原理
  8. BluePrism注册下载并安装-RPA第一章
  9. 美术集网校—联考素描如何考高分?90分素描这样画
  10. 数据库系统概论 中文高清PDF版下载