使用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计算机毕业设计创意产品众筹
- 下一篇: 电阻入门知识