在使用stm32f103系列微控制器的時候總是會碰到rtc計時的問題,103系列微控制器的rtc使用的是秒計時
在經過一段時間的研究,終於發現了一種比較簡單而且易於理解的使用方法,就是結合系統檔案time.h的使用
首先要新增標頭檔案
#include
rtc的初始化和普通方式無區別
u8 rtc_init(void)
rcc_rtcclkconfig(rcc_rtcclksource_lse); //設定rtc時鐘(rtcclk),選擇lse作為rtc時鐘
rcc_rtcclkcmd(enable); //使能rtc時鐘
rtc_waitforlasttask(); //等待最近一次對rtc暫存器的寫操作完成
rtc_waitforsynchro(); //等待rtc暫存器同步
rtc_itconfig(rtc_it_sec, enable); //使能rtc秒中斷
rtc_waitforlasttask(); //等待最近一次對rtc暫存器的寫操作完成
rtc_enterconfigmode(); //允許配置
rtc_setprescaler(32767); //設定rtc預分頻的值
rtc_waitforlasttask(); //等待最近一次對rtc暫存器的寫操作完成
clock_settime(2015,1,14,17,42,55); //設定時間
rtc_exitconfigmode(); //退出配置模式
bkp_writebackupregister(bkp_dr1, 0x5aa5); //向指定的後備暫存器中寫入使用者程式資料
}else
//如果已配置過則不再進行配置
rtc_nvic_config(); //rct中斷分組設定
clock_get(); //更新時間
return
0;}
設定時間和讀取時間採用結構體的方式
首先需要定義乙個時間結構體
typedef struct
_calendar_obj;
_calendar_obj calendar;//時鐘結構體
在設定時間時
oid clock_settime(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec)
}
讀取時間
void clock_get(void)
開啟秒中斷
void rtc_irqhandler(void)
rtc_clearitpendingbit(rtc_it_sec|rtc_it_ow);//清鬧鐘中斷
rtc_waitforlasttask();
}
STM32F103微控制器生成16路PWM波
微控制器輸出pwm波在專案中是恨常用的乙個功能,今天就總結一下用stm32f103c8t6微控制器輸出16路 pwm波。使用keil5軟體,用標準庫函式來實現。首先看定時器初始化 void tim1 pwm init u16 arr,u16 psc 初始化定時1的4個通道,對應io口為 pa8,pa...
解決STM32F103微控制器PB4無法拉低的問題
最近使用stm32f103的微控制器,pb4接了乙個led燈,低電平點亮,發現程式沒有辦法拉低pb4。而同樣電路的pb5 就能輸出低電平。通過檢視資料手冊,發現pb4預設是jtag引腳,並置於上拉模式,所以沒法直接當做普通的io口拉低。rcc apb2periphclockcmd rcc apb2p...
stm32f103外部中斷
void extix init void 外部中斷0服務程式 void exti9 5 irqhandler void 這是簡單的外部中斷的配置,pc7作為中斷輸入 上面補充io口的初始化 gpio initstructure.gpio mode gpio mode ipu pc6配置為快充指示 1...