??STM32F103單片機中定時器分為3種,高級定時器、通用定時器、基本定時器。
??基本定時器TIM6和TIM7各包含一個16位自動裝載計數器,由各自的可編程預分頻器驅動。它們可以作為通用定時器提供時間基準,特別地可以為數模轉換器(DAC)提供時鐘。實際上,它們在芯片內部直接連接到DAC并通過觸發輸出直接驅動DAC。這2個定時器是互相獨立的,不共享任何資源。
TIM6和TIM7定時器的主要功能包括:
16位自動重裝載累加計數器
16位可編程(可實時修改)預分頻器,用于對輸入的時鐘按系數為1~65536之間的任意數值分頻
觸發DAC的同步電路
在更新事件(計數器溢出)時產生中斷/DMA請求
??這個可編程定時器的主要部分是一個帶有自動重裝載的16位累加計數器,計數器的時鐘通過一個預分頻器得到。軟件可以讀寫計數器、自動重裝載寄存器和預分頻寄存器,即使計數器運行時也可以操作。
??通過上面的介紹可以看出,基本定時器的功能很簡單,就只是提供一個簡單的定時功能。下面通過代碼演示基本定時器的定時功能:
// 中斷優先級配置
static void TIM6_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 設置中斷組為0
NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn ; // 設置中斷來源
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 設置主優先級為 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 設置搶占優先級為3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*
* 注意:TIM_TimeBaseInitTypeDef結構體里面有5個成員,TIM6和TIM7的寄存器里面只有
* TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的時候只需初始化這兩個成員即可,
* 另外三個成員是通用定時器和高級定時器才有.
*-----------------------------------------------------------------------------
*typedef struct
*{ TIM_Prescaler 都有
* TIM_CounterMode TIMx,x[6,7]沒有,其他都有
* TIM_Period 都有
* TIM_ClockDivision TIMx,x[6,7]沒有,其他都有
* TIM_RepetitionCounter TIMx,x[1,8,15,16,17]才有
*}TIM_TimeBaseInitTypeDef;
*-----------------------------------------------------------------------------
*/
static void TIM6_Mode_Config(u16 arr, u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); // 開啟定時器時鐘,即內部時鐘CK_INT=72M
TIM_TimeBaseStructure.TIM_Period = arr; // 自動重裝載寄存器的值,累計TIM_Period+1個頻率后產生一個更新或者中斷
TIM_TimeBaseStructure.TIM_Prescaler= psc; // 時鐘預分頻數為
//TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 時鐘分頻因子 ,基本定時器沒有,不用管
//TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 計數器計數模式,基本定時器只能向上計數,沒有計數模式的設置
//TIM_TimeBaseStructure.TIM_RepetitionCounter=0; // 重復計數器的值,基本定時器沒有,不用管
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); // 初始化定時器
TIM_ClearFlag(TIM6, TIM_FLAG_Update); // 清除計數器中斷標志位
TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); // 開啟計數器中斷
TIM_Cmd(TIM6, ENABLE); // 使能計數器
}
void TIM6_Init(void)
{
TIM6_NVIC_Config();
TIM6_Mode_Config(10-1,72-1);
}
void TIM6_IRQHandler ( void )
{
if ( TIM_GetITStatus( TIM6, TIM_IT_Update ) != RESET )
{
LED0=!LED0;
TIM_ClearITPendingBit( TIM6, TIM_FLAG_Update );
}
}
??基本定時器的初始化高級定時器和通用定時器簡單很多,只需要設置定時器的周期值和時鐘分頻系數就可以了。如果要使用中斷功能時,需要設置NVIC寄存器,這個寄存器主要是用來設置中斷優先級。
int main(void)
{
u8 key = 0;
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_Init();
KEY_Init();
TIM6_Init();
while(1)
{
}
}
??在主函數中調用定時器初始化函數后,定時器就開始工作了。定時器時間計算公式為(arr+1)*(psc+1)/72MHz,將參數9、71帶入公式后,計算出定時器的定時周期值為10us。
上一篇:STM32F103自定義的printf函數的實現
下一篇:STM32F103通用定時器使用
推薦閱讀
史海拾趣
CW Industries公司一直堅持從原材料到最終成品的完全一體化制造流程。這一制造模式使得公司能夠對產品質量進行更嚴格的控制,并確保每一個生產環節的優化。為了進一步提高生產效率,CW Industries還引進了自動化設備,使得制造過程更加高效和精確。這種對生產流程的精細管理,讓CW Industries在電子行業中樹立了良好的口碑,并為公司的持續發展提供了有力保障。
隨著全球電子市場的不斷擴大,CW Industries也積極拓展其國際業務。公司通過參加各種國際電子展會和交流活動,與全球各地的客戶和合作伙伴建立了廣泛的聯系。這不僅為公司帶來了更多的商機,還使得CW Industries能夠及時了解國際市場的最新動態和技術趨勢。通過這些國際交流活動,CW Industries不斷提升其品牌影響力和市場競爭力。
在發展過程中,Ai公司積極尋求與行業內外的合作伙伴建立合作關系。公司與多家知名企業簽訂了戰略合作協議,共同開發新產品、拓展新市場。同時,公司還與其他科研機構、高校等進行合作,引進先進技術和人才,為公司的創新發展提供了有力支持。這些合作不僅為公司帶來了更多的商業機會,也促進了整個行業的進步與發展。
這些故事是基于電子行業的一般發展規律和可能的企業發展路徑構建的,并不代表Advanced Illumination Inc公司的真實歷史。如需了解該公司的真實發展情況,建議查閱相關資料或訪問其官方網站。
在成功開發出優質產品后,Ai公司開始積極拓展市場。公司通過參加各種行業展會、舉辦技術研討會等方式,與潛在客戶進行深入交流,成功將產品推廣至全球范圍。同時,公司還注重品牌建設,通過廣告宣傳、媒體報道等手段提升品牌知名度和美譽度。這些舉措使得Ai公司的產品在市場上獲得了廣泛的認可。
艾為電子注重與產業鏈上下游企業的合作,通過協同創新和資源共享,實現共贏發展。例如,艾為與歌爾股份建立了長期合作伙伴關系,雙方在聲光電射手等領域展開了深度合作,共同推出了多款優秀產品。此外,艾為還與多家ODM廠商和智能硬件企業建立了緊密的合作關系,共同推動產業鏈的協同發展。
隨著工農業生產中的人們對調速的要求越來越高,交流電動機變頻調速技術在生產實踐中使用也越來越多。筆者針對變頻器在實際使用中的六個方面應該注意的問題進行了簡單闡述。 1 物理環境 由于變頻器集成度高,整體結構緊湊,自身散熱量較大, ...… 查看全部問答∨ |
|
簡單的基本應用可以了,就是穩定性方面,有時候重連的時候會在netconn_connect各里面阻塞掉重連任務,有時候網線 和PC都正常, netconn_connect返回-4(連接終止),哪位有什么意見,給指點一下,非常感謝!!… 查看全部問答∨ |
|
Nvidia GeForce 7300 LE 和 Nvidia Geforce4 MX440 with AGP8x 哪個顯卡性能好些? Nvidia GeForce 7300 LE 和 Nvidia Geforce4 MX440 with AGP8x 哪個顯卡性能好些?… 查看全部問答∨ |
各位有玩過傳真芯片沒 傳真通訊過程中發送端要發送TCF,是1.5s的“0”串 是1.5s的0x00么 另外 接收端怎樣確定正確接收TCF 是判斷接收的是不是1.5s的0x00么 各位指點下 謝謝… 查看全部問答∨ |
我現在有個工程需要在VxWorks下面使用xml解析器,目前找到了 幾種庫的源文件 libxml2和tinyxml ,前者我不知道在tornado下如何編譯,而且還需要iconv的庫,比較麻煩沒搞懂,另外一種是tinyxml,在tornado下編譯通過了,下載到vxworks下面就報告一大 ...… 查看全部問答∨ |
|
//ICC-AVR application builder : 2011/10/14 14:12:17 // Target : M32 // Crystal: 8.0000Mhz #include <iom32v.h> #include <macros.h> #define uint unsigned int #define uchar unsigned char #define CLR 0 #define SET 1 / ...… 查看全部問答∨ |