概述
本文簡要記述關于stm8s003中初始化timer2立即進入中斷的解決方法:
在調試stm8 tim2作為100ms定時器的時候發現,在enable timer2后,不久遠遠小于100ms大概800us左右就會立即進入中斷(更新事件觸發),無論是怎樣設置先后順序,以及在enable中斷之前清除中斷狀態位都無法解決進入中斷的問題。此處澄清真的不是st的bug,不過這種設計不是我等小白能夠領悟到的,哈哈!
搜索
在度娘中搜索到的結果一般解決方法都是等待第一次觸發后清除事件再打開中斷。出于對知(領)識(導)的好(壓)奇(迫),便尋找解決方法,最終找到了問題的根源(google大法好:https://community.st.com/s/question/0D50X00009XkWotSAF/premature-tim2-interrupt-happening-immediately-on-timer-start)
原因
究其原因是因為在初始化中對預分頻器(ARRPreload)進行了更新。實際上在觸發更新時間后,該寄存器的配置才會生效(spec中有說明),故進入中斷的原因是因為預分頻器數值默認為0(寫文章時并沒有考究是不是0,反正遠遠小于我設置的數值),才在使能后短時間內觸發中斷,實際上是真的溢出觸發了中斷。
附上大家喜愛的代碼,親測可用,基于2M HSI CLK
這里沒有列出中斷函數,清中斷神馬的就不是問題的根源,不在贅述(代碼不在此電腦中,懶得考了)
static void TIM2_Start()
{
GPIO_WriteReverse(GPIOA, GPIO_PIN_1);//測試用
GPIO_WriteReverse(GPIOA, GPIO_PIN_2);//測試用
TIM2_Cmd(ENABLE);
}
static void TIM2_Stop()
{
TIM2_Cmd(DISABLE);
GPIO_WriteReverse(GPIOA, GPIO_PIN_2);
TIM2_UpdateDisableConfig(ENABLE);
TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE);
TIM2_UpdateDisableConfig(DISABLE);
}
static void TIM2_Config(void)
{
TIM2_DeInit();
/* Time base configuration */
TIM2_TimeBaseInit(TIM2_PRESCALER_128, 0x061b);
TIM2_ARRPreloadConfig(ENABLE);
TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR);//中斷源選擇為只有溢出才能觸發
TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE);//產生更新事件,不觸發中斷(這就是我的解決方法,此處即更新了預分頻器)
TIM2->SR1 &= 0xFE;//清除中斷,按常理應該沒用
TIM2->IER |= 0X01;//使能TIMER
}
[1]:我的GITHUB原文 https://ladudu.github.io/2018/11/28/STM8S_TIMER2_INTERRUPT/
[2]: 參考 https://community.st.com/s/question/0D50X00009XkWotSAF/premature-tim2-interrupt-happening-immediately-on-timer-start
上一篇:STM8L101F3輸入捕獲測脈寬及占空比
下一篇:STM8S TIM1/TIM2 初始化函數
推薦閱讀
史海拾趣
近年來,隨著智能醫療和金融科技等新興領域的興起,DFI看到了新的發展機遇。公司開始將這些領域作為重點發展方向,投入大量資源進行研發和創新。通過與合作伙伴的緊密合作,DFI成功推出了一系列具有創新性的智能醫療和金融科技產品。這些產品不僅為客戶提供了更便捷、更高效的服務體驗,也為DFI帶來了新的增長點。隨著這些新興領域的不斷發展壯大,DFI有望在未來實現更大的突破和發展。
請注意,以上故事均為虛構,旨在展示DFI公司可能的發展歷程和業務活動。實際情況可能有所不同,具體信息請參考DFI公司的官方資料。
隨著市場競爭的加劇,DFI意識到單一產品的競爭力有限。因此,公司開始尋求垂直整合的機會,與羅升等公司合作,共同開發智能制造的全面性解決方案。這一舉措不僅使DFI能夠提供更完整的產品線,還增強了其在行業中的競爭力。通過與合作伙伴的緊密合作,DFI成功推出了一系列具有競爭力的智能制造解決方案,贏得了市場的廣泛認可。
作為英國翹楚皮具品牌,Ettinger有幸獲得了H.R.H威爾士王的皇家保證。這一榮譽不僅是對Ettinger產品質量的認可,也為品牌的發展帶來了更多的機遇。隨著品牌知名度的提升,Ettinger逐漸成為了英國人最喜愛的皮具品牌之一,并在全球范圍內擁有了廣泛的粉絲群。
Cherry公司的研發部門一直是其核心競爭力所在。在一位年輕小伙子的帶領下,Cherry在1983年成功研發出了具有里程碑意義的MX機械軸。這一創新產品不僅提升了鍵盤的使用壽命和舒適度,還解決了多個按鍵同時按下時的沖突問題。MX軸的誕生標志著Cherry在機械鍵盤領域取得了重大突破,也為公司贏得了更多的市場份額。
隨著物聯網技術的飛速發展,蜂鳥無線也緊跟時代步伐,將研發重心向物聯網安全領域傾斜。公司推出的Hnt網關,集成了先進的加密芯片和Helium共識機制,有效抵御了物聯網設備面臨的各種安全威脅。這一創新產品不僅提升了物聯網系統的安全性,還降低了運維成本,為物聯網行業的健康發展提供了有力支持。蜂鳥無線的這一舉措,進一步鞏固了其在無線通信和物聯網安全領域的領先地位。
在激烈的市場競爭中,品牌建設成為Amaze Electronics提升市場影響力的關鍵。公司注重品牌形象的塑造,通過舉辦各類活動、參與行業展會等方式,提高品牌知名度和美譽度。同時,公司還注重產品質量的把控,確保每一件產品都能體現公司的專業水準和品質追求。這些舉措有效提升了Amaze Electronics在市場上的影響力,吸引了更多客戶的關注和信賴。
Cadence設計系統公司推出了Universal Verification Components(UVCs)。它是可復用驗證IP(VIP)的一個新產品,能將兼容性管理和多語言的靈活性與基于模擬的測試環境先進 技術相集成。UVC能降低質量和進度延遲的風險,以及對特殊協 ...… 查看全部問答∨ |
【一個快速查找datasheet 的小工具來自datasheet5.com】 本帖最后由 paulhyde 于 2014-9-15 04:21 編輯 一個很好的下載datasheet的小工具,避免大賽的時候到處找資料 不到1M,但功能超強,基本所有的資料都可以下載到哦 datasheet5.com … 查看全部問答∨ |
寫了個SHELL,如下: #!/bin/bash hello="$(dirname ./configure)" echo $hello 運行結果為:空行 在終端下輸入 hello="$(dirname ./configure)" echo $hello 運行結果為:. 奇怪的是:shell下結果是錯誤的,終端下是正 ...… 查看全部問答∨ |
一段時間沒用,結果再用的時候提示 下面圖片的情況 error:simulator failed to initialize before timeout 重裝也沒有用:(郁悶死了 是什么原因啊? [s:6]… 查看全部問答∨ |
參考手冊 表37 帶剎車功能的互補輸出通道 OCx 和 OCxN 的控制位中 當MOE,OSSI,OSSR,CCxE,CCxNE = 1,X,0,0,0時,OCx=CCxP, OCxN=CCxNP ...… 查看全部問答∨ |
剛開始學些,有個問題總沒有搞清楚,請教各位大俠。 <<<<< >>>>>>> 部分為不清楚的地方,懇請指教一下。多謝了 #include<msp430x14x.h> /* REGISTER: BCSCTL1 XT2OFF XTS DIVA.1 DIVA.0 ...… 查看全部問答∨ |
pic單片機 RA口和RB口區別在那里呢? RB口可以作為鍵控端,可RA口卻不能。(是仿真得出的結論)誰能說說是為什么?歡迎交流!… 查看全部問答∨ |
中斷出來的PWM怎么沒有時間差啊 祈求各位大神幫助#include <msp430x14x.h>#include <math.h>#define uint unsigned int#define uchar unsigned char #define ulong unsigned long#define keyin (P1IN & 0x ...… 查看全部問答∨ |