1問題來源
我前面移植一部分代碼,忽略了一些細節問題,直接測試,一有數據(正常應該是進入中斷),程序就掛了,進入了“B .”處,如下圖:
這代表什么意思呢? 網上一搜B .的意思就知道,程序運行到這個地方,在這里死循環了。
2問題跟蹤,并解決
遇到上面問題,于是我就開始了在線調試查找問題。果然,在線調試一眼就看出了問題,中斷函數體沒有被觸發,先看下圖:
看上圖,經常調試的人就知道,前面沒有灰色的標記代表程序不會運行到這個位置。
上面那個DEBUG_COM_IRQHandler函數,我使用的是宏定義:
那么,問題來了,我使用了宏定義中斷函數接口,為什么沒有進入中斷函數?
問題就出在宏定義和被定義函數體的包含關系,簡單說就是:stm32f4xx_it.c文件里面應該添加#include "bsp_usart.h"這行代碼。
不添加包含宏定義的文件,編譯時就會把DEBUG_COM_IRQHandler當做成一個普通函數,也不會出錯。此時,中斷函數其實是沒有定義的,那么,程序運行中斷函數時,沒有定義函數體,自然就會跳轉到B .處去。
解決的辦法就如上所說:stm32f4xx_it.c文件添加添加#include "bsp_usart.h"即可。
3總結
針對以上問題,拓展并總結幾點內容:
1.宏定義注意事項
宏定義與源代碼最好要高度一致,就拿USART時鐘的宏定義來說,如下這種方式就容易出錯。
宏定義:
#define DEBUG_COM_CLK RCC_APB2Periph_USART1
調用方式:
RCC_APB2PeriphClockCmd(DEBUG_COM_CLK, ENABLE);
假如我修改時鐘:
RCC_APB2Periph_USART1改為RCC_APB1Periph_USART2
發現問題沒有:
APB2和APB1混亂調用了。
2.B .含義
這里提出來,是讓有些初學者順便了解一下(其實網上一搜就明白)。這是一個匯編指令,“B”代表不返回的跳轉,比如跳到某個標號處。“.”是指定當前的地址, B .這條指令,其實就是死循環。
3.在線調試代碼覆蓋
經常有朋友問題:我在線調試,為什么有些地方不能打斷點? 處理需要配置輸出調試信息之外,就是這里說的代碼覆蓋問題。
看見我上面有兩個中斷函數那張圖沒有,里面我有文字說明:前面有灰色標記的代碼,代表程序可執行(已覆蓋)。相反,則沒有被覆蓋。
4.中斷函數接口宏定義
一般很多初學者不知道函數接口可以使用宏定義。其實,有很多地方,包括一些標準的代碼都有用到使用宏定義函數接口。拿我們比較熟悉的FreeRTOS來說,為了移植方便,使用宏定義三個中斷函數,如下圖:
這里需要注意的就如上面分析的,包含關系需加上。
上一篇:關于STM32時鐘配置的那些坑
下一篇:STM32看門狗和復位IC同時存在的注意事項
推薦閱讀
史海拾趣
DDD公司成立于1964年,當時正值電子行業的蓬勃發展期。創始人看到了延遲線技術在計算機和電信領域中的巨大潛力,決定投身其中。然而,初期的市場并不如預期般順利,公司面臨著資金短缺、技術難題和市場競爭等多重壓力。但DDD公司的創始人憑借對技術的熱情和堅定的信念,帶領團隊不斷研發新產品,優化生產工藝,逐漸在市場中樹立了自己的品牌形象。
隨著公司實力的不斷增強,DDD公司開始積極拓展市場。公司針對不同領域的需求,推出了多種定制化產品,滿足了客戶的多樣化需求。同時,DDD公司還積極參與國內外展覽和交流活動,加強與同行的合作與交流,提高了公司的知名度和影響力。這些市場拓展策略的實施,為DDD公司的快速發展奠定了堅實基礎。
隨著業務的不斷發展,科恩和班意識到電子測試和測量領域的巨大潛力。1951年,他們將公司更名為B&K Precision,并開始擴展業務,涉足其他電子測試和測量領域。工程師們憑借在電視測試設備領域的豐富經驗,不斷研發新產品,獲得了多項專利,并推動公司迅速成為全球電子測量領域的領導者。
為了保持技術領先和市場競爭力,晶岳電子一直注重研發團隊的建設。目前,公司在上海、深圳及臺灣均建有成熟的產品研發團隊,核心功率器件及集成電路設計人員均擁有15年以上的設計研發經驗。這些優秀的研發人員不僅為公司帶來了源源不斷的技術創新,也確保了公司在激烈的市場競爭中始終保持領先地位。此外,晶岳電子還積極與高校和研究機構合作,共同開展前沿技術的研發和應用。
PSP發售至今,其內部也經歷了數次更新換代,由最初的TA-79的主板到現在最新的TA88主板,在破解的玩家眼中每款都有著鮮明的“個性”;這每一塊主版的出現,都伴隨這一段段PSP的破解歷史。現在就讓我來帶大家看看至今7款PSP主板。 TA-79 &n ...… 查看全部問答∨ |
|
圖1有兩個地方我沒明白:1.N203B運放的作用,我測得N203B 7腳電壓為2.5V,不知道怎么算出來,這個運放的接法我沒遇到過。2.從我的觀點看N202A基本上是一個跟隨器,但正如問題1中所說,N203B的7腳是2.5V,那么N202A的1腳也應為2.5V,而我實際測得1腳 ...… 查看全部問答∨ |
|
我趨向于DIY5438的片子,畢竟現在是TI力推的新核心,板子資源如下: 1、包含USB接口的BSL下載器,提供下載代碼用但是BSL不能仿真 2、SPI的93C46存儲器 3、3個串口或TTL 4、1路RS485 5、RTC時鐘芯片DS1302 6、溫度采集18B20 7、1路AD采集 8 ...… 查看全部問答∨ |