学习报告(2)
usart 和 openmv
一、USART的學習
(1)學習目標:
任務一、使用串口調試助手對單片機外設進行一些簡單的控制,比如控制LED燈的亮滅
任務二、使用串口調試助手對舵機進行控制
(2)學習成果展示:
任務一:利用usart中斷控制LED
任務二:利用usart中斷控制舵機
(3)學習目標任務過程中遇到的困難:
1、已確定代碼無問題,但是發送給串口的數據就是無法通過usart中斷函數發送到PC的串口調試助手打印窗口。在歷時6個小時后,終于解決了,真就不是代碼的問題,而是軟件的設置有問題。
先說解決辦法:找到keil主頁面的“魔術棒”如下圖(中間那個):
然后點進去找到“target”一欄,找到“use micrllib”的字樣,在其前面勾選,如下圖
這樣,問題就解決了!串口成功接收!
1.1勾選use micrllib原因:
1.1.1、勾選use micrllib將使用半主機模式,半主機模式是用于 ARM 目標的一種機制,可將來自應用程序代碼的輸入/輸出請求傳送至運行調試器的主機。 例如,使用此機制可以啟用 C 庫中的函數,如 printf() 和 scanf(),來使用主機的屏幕和鍵盤,而不是在目標系統上配備屏幕和鍵盤。 這種機制很有用,因為開發時使用的硬件通常沒有最終系統的所有輸入和輸出設備。 也就是說勾選后半主機可讓主機來提供這些設備。勾選之后簡單的來說,半主機模式就是通過仿真器實現開發板在電腦上的輸入和輸出
1.1.2、不勾選use micrllib的話,printf重定向代碼部分要改成如下:
改成這樣之后我一打開串口調試助手,接收屏幕就不斷發送亂字符,如下:
然后在main函數里面加了一段代碼:
while(1)
{
}
然后就可以正常接收了。。。。。。。。。。(具體原因還有待深究)
2、第二個困難:
由于我不想給屏幕上發送uctemp的值,覺得臭,然后注釋掉了下面那段代碼:
USART_SendData(DEBUG_USARTx,ucTemp);但是注釋掉之后發現不能連續發送指令控制LED了,查了手冊之后才發現,原因如下藍色字體:
就是說如果未發送數據就退出不了中斷。。。。會永遠停留在如下的語句當中:
所以每次復位單片機后只能發送一次指令并執行。
二、USART與OPENMV結合
(1)學習目標:
任務一、利用串口通信將openmv與stm32進行一個簡單的通信,并點亮一個燈。
(2)學習成果展示:
(3)學習中遇到的困難:
3.1:
— 剛開始接觸openmv,想要把openmv往pC機的串口調試助手發送顏色塊的中心位置,結果發現總是打開不了串口調試助手,顯示串口正再被占用。后來才知道,openmvide本身就有個類似串口調試助手的終端,是這里占用了。想要openmv獨立運行代碼而不使用openmvide的串口終端,就必須使用脫機運行。
如何脫機運行呢?下面這個鏈接有教程,是openmv中國代理的一家公司的教程:openmv如何脫機運行,看完即可
3.2:openmv通過串口發送單個數據
-----3.2.1
stm32f103zet6串口1、2、3叫usart,串口4、5叫usart。。。之前出錯就是這里名字弄混了。
-----3.2.2
之前main函數里調用了printf,但是未重定向,導致了硬錯誤,其結果就是無法進入到自己寫的串口4中斷服務函數,而是直接進入了stm32f10x_it.h里面的一個叫void HardFault_Handler(void) 的中斷,以至于程序直接卡死在這里面(里面有個while)
軟錯誤就是自己寫的代碼有問題。
總結
- 上一篇: 【设计模式】适配器模式:如何巧妙地过滤游
- 下一篇: 超级水王问题