剛學STM8,把如何解決調試過程中出現的問題記錄下來。
芯片采用的是STM8S103F3P6,準備做一個刷卡模塊,其中delay函數是用tim2定時器實現的。在網上下的例程,delay函數的單位是1ms,我覺得間隔時間有點長了,準備改成10us,使用HSE外部晶振8MHz,8分頻,計10個數產生更新中斷。再做一個ms的延時函數,100個10us延時函數實現。
問題現象:
在運行的過程中,發現timer2初始化,打開中斷函數enableinterrupts后,程序無法跳出。
問題分析步驟:
1.我先進行了調試,發現程序在tim2的中斷服務函數里無法跳出,一開始我認為可能是清除中斷標志位的代碼沒有執行,或是清除中斷標志位應該放在進入中斷服務函數之后就立即執行,把代碼移到中斷服務函數中第一句,再運行,還是不行;
2.打開寄存器顯示窗口,對照著stm8s的中文手冊,找到tim2的寄存器相關內容,單步調試,發現TIM2->SR1的清除中斷位有被置0,但是隔幾步就又會被置1,我先分析可能是某一處代碼的問題,但是重新開始了四五次,發現置1的時機是不固定的。這時我才注意到CNTRL這個寄存器,好像是每次都是在這個寄存器的值變成0x09之后SR1置1的。這才反應過來,可能是tim2的中斷服務函數在處理的過程中,又有一個更新中斷進來,把SR1的更新中斷位重新置1,也就是說我的tim2的定時時間過短。
問題解決:
在延長了定時器的更新時間(100us)后,問題解決了。
總結:
在調試的過程中,發現了查看寄存器的威力,這是一種能夠更快解決問題的方法。之前使用stm32的時候由于網上資源豐富,基本上哪種問題都能搜索到,一開始上手也是學的庫函數版本,所以對寄存器調試使用不多,多是用watch窗口看變量值的方法。但是stm8網上資源較少,更多還需要自己動手,這才體現出查看寄存器值的優勢。從發現問題到解決問題一共用時三小時左右。
上一篇:STM8S中斷系統
下一篇:STM8S103之tim2捕獲周期
推薦閱讀
史海拾趣
為了滿足亞洲市場的需求,DB Lectro Inc決定在中國上海設立子公司及工廠。這一戰略舉措不僅使公司能夠更貼近亞洲客戶,還大大降低了生產成本。在上海工廠的建設過程中,公司充分考慮到環保和可持續性發展的要求,采用了先進的生產工藝和設備。隨著工廠的投產和產能的不斷提升,DB Lectro Inc的產品在亞洲市場的占有率也穩步上升。
EOI始終將產品質量放在首位。公司建立了嚴格的質量管理體系,從原材料采購到生產流程,再到產品檢測,每一個環節都嚴格把控。同時,EOI還注重員工的培訓和教育,提高員工的質量意識和技能水平。這些努力使得EOI的產品質量得到了客戶的廣泛認可,公司也因此樹立了良好的品牌形象。
隨著LED市場的不斷發展,EOI意識到只有不斷拓展市場,才能謀求更大的發展空間。因此,公司開始積極開拓國際市場,參加各種國際展會和交流活動,與國際同行建立聯系和合作。同時,EOI還注重與國內客戶的溝通和合作,了解他們的需求,提供個性化的解決方案。這些努力使得EOI的市場份額不斷擴大,公司的業務規模也實現了快速增長。
進入21世紀,福祿克通過一系列精明的并購活動,實現了業務的快速擴張。2000年,公司成功收購了Wavetek Wandell Goltermann的精密測量部門,這次并購不僅增強了福祿克在電氣校準市場的競爭力,還為其帶來了豐富的技術專利和客戶資源。此后,福祿克繼續通過并購方式,進入新的技術領域和市場領域,不斷拓寬其業務范圍。
CSC公司成立于21世紀初,當時正值中國半導體產業剛剛起步。面對國際巨頭的壟斷和技術封鎖,CSC公司從零開始,憑借一腔熱血和堅定的信念,開始了艱難的創業之路。公司初期,資金匱乏、人才短缺,但CSC人憑借著對技術的執著追求和對市場的敏銳洞察,成功研發出多款具有自主知識產權的半導體產品,打破了國外技術的壟斷,為中國半導體產業的崛起奠定了基礎。
面對行業技術的快速迭代,Austek Microsystems始終保持敏銳的洞察力。公司不斷投入研發資金,引進先進的生產設備和技術人才,進行技術升級和產品迭代。通過不斷地優化產品性能、提升生產效率,Austek Microsystems逐漸在市場中樹立起了技術領先的形象。
新型的大功率4148採用性價比最好的厚膜塗裝方式產製出平板式貼片CHIP DIODE開關二極管,簡稱CD4148,此外也有 穩壓 肖特基 SCHOTTKY 都可以通過SGS與無鉛260度C 10SEC 高溫回流焊錫 使用日本羅姆公司專用芯片封裝成1206 /0805,的可以耐住500 ...… 查看全部問答∨ |
程序如下:KEIL調試沒錯,不過仿真有問題!大家能不能幫我修改一下! #include #define keyR P0 #define keyC P0 sbit DE=P3^4; //sbit RD=P3^7; //sbit WR=P3^6; sbit A13=P2^5; sbit A14=P2^6; sbit A15=P2^7; sbit P00=P0^0; sbit P0 ...… 查看全部問答∨ |
我現在需要把一個DAC輸出的電壓,在0~3V范圍內,需要提高到0~4V就可以了,使用5V電源,其他方面沒有特殊的要求,轉換的電壓是用來調節3525的。我自己先用OP27弄了一下,但是不知道輸出電壓總是高于2V,下不去!哪位給我推薦個合適的芯片?謝謝!… 查看全部問答∨ |
LPC1343中文數據手冊---中文翻譯,4.30更新,基礎部分翻譯完畢 呵呵,我還是喜歡看中文數據手冊。 無奈老外們對中國市場不大重視,根本不提供中文手冊。(迄今只看到AVR單片機有官方提供的中文數據手冊,贊一個)。 相信大家伙跟我一樣,也有很多人喜歡看中文數據手冊。 既然沒有現成的,只 ...… 查看全部問答∨ |
taskspawn 分配一個任務時,參數中有優先級,堆棧大小,我要怎么來寫啊?剛剛搞這個東西。 taskspawn 分配一個任務時,參數中有優先級,堆棧大小,我要怎么來寫啊?剛剛搞這個東西。 我看例子中優先級大都是90,我要是創建多個任務時,都寫90行嗎? 還有堆棧大小我要根據什么來設置啊? 謝謝了… 查看全部問答∨ |
|
求助 幫看下信號采集程序可以不,其中有信號處理程序單獨仿真過是對的 采集部分的思路是對信號源采集16個信號后再進行處理 #include<reg51.h>#include <stdio.h>#include <absacc.h>#include <math.h>#define PI 3.1415926;#define uchar unsigned charuchar ar[16];uchar u=0;uchar ...… 查看全部問答∨ |
|
手頭上有個XDS100V2,14PIN JTAG接口,想用來仿真LM3S6911, 昨天出現問題,沒能正確連接上,今天又重新弄了一次,自己有塊F28035的板子,發現它的JTAG接口和我的M3板子上的JTAG接口差不多。所以我就把F28035板子上的TCK,TDI,TMS,TDO這四根線分別對 ...… 查看全部問答∨ |