日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]Ⅰ、概述接著上一篇文章來(lái)講述關(guān)于RTC的計(jì)數(shù)功能,我們以實(shí)例RTC日歷(讀寫(xiě)年、月、日、星期、時(shí)、分、秒)來(lái)講述該章節(jié)。STM32F1系列芯片的RTC功能和其他系列(F0、F2、F4等)相比來(lái)說(shuō),功能要弱一點(diǎn),原因在于F1系

Ⅰ、概述

接著上一篇文章來(lái)講述關(guān)于RTC的計(jì)數(shù)功能,我們以實(shí)例RTC日歷(讀寫(xiě)年、月、日、星期、時(shí)、分、秒)來(lái)講述該章節(jié)。

STM32F1系列芯片的RTC功能和其他系列(F0、F2、F4等)相比來(lái)說(shuō),功能要弱一點(diǎn),原因在于F1系列的RTC日歷功能需要我們通過(guò)軟件進(jìn)行處理(換算RTC計(jì)數(shù)值)才能真正實(shí)現(xiàn)RTC日歷的功能,而其他系列芯片不用這么麻煩,可直接讀取日歷值。

該文和上一篇文章的區(qū)別:1、RTC時(shí)鐘源選擇LSE(外部低速時(shí)鐘); 2、分頻值是32768; 3、讀寫(xiě)了RTC_CNT(計(jì)數(shù)值),用于RTC日歷。

本文章提供的實(shí)例工程,其實(shí)驗(yàn)效果是:

主函數(shù)間隔0.5秒LED變化一次;

間隔1秒中斷:讀取日歷并打印出來(lái)。

電腦串口調(diào)試助手接收到數(shù)據(jù):年月日星期時(shí)分秒

關(guān)于本文的更多詳情請(qǐng)往下看。

Ⅱ、實(shí)例工程下載

筆者針對(duì)于初學(xué)者提供的例程都是去掉了許多不必要的功能,精簡(jiǎn)了官方的代碼,對(duì)初學(xué)者一看就明白,以簡(jiǎn)單明了的工程供大家學(xué)習(xí)。

筆者提供的實(shí)例工程都是在板子上經(jīng)過(guò)多次測(cè)試并沒(méi)有問(wèn)題才上傳至360云盤(pán),歡迎下載測(cè)試、參照學(xué)習(xí)。

提供下載的軟件工程是基于Keil(MDK-ARM)v5版本、STM32F103ZE芯片,但F1其他型號(hào)也適用(適用F1其他型號(hào): 關(guān)注微信,回復(fù)“修改型號(hào)”)。

STM32F10x_RTC日歷(LSE)實(shí)例源代碼工程:

https://yunpan.cn/cBDwPJcChZRFE訪問(wèn)密碼

STM32F10x_RTC日歷(LSI)實(shí)例源代碼工程:

https://yunpan.cn/cBDwSikRhZ2Nk訪問(wèn)密碼

STM32F1資料:

https://yunpan.cn/crBUdUGdYKam2訪問(wèn)密碼ca90

Ⅲ、原理描述

以筆者個(gè)人學(xué)習(xí)經(jīng)歷來(lái)說(shuō),想要掌握其真正原理,最好還是查看參考手冊(cè)(現(xiàn)在有很多都翻譯為中文了),里面模塊的框圖,從框圖中大概就可以看到該模塊有些什么功能及其工作的原理。

RTC框圖:

從上面系統(tǒng)框圖來(lái)分析“RTC秒中斷”和“RTC_CNT計(jì)數(shù)”的原理:

1.RTC時(shí)鐘源,總共有三類:

RCC_RTCCLKSource_LSE

RCC_RTCCLKSource_LSI

RCC_RTCCLKSource_HSE_Div128

本文實(shí)例代碼是:RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

重點(diǎn):

細(xì)心的朋友可能會(huì)發(fā)現(xiàn):筆者還提供了一個(gè)實(shí)例“STM32F10x_RTC日歷(LSI)”。對(duì),這個(gè)實(shí)例是以LSI內(nèi)部低速時(shí)鐘作為RTC時(shí)鐘源。

先問(wèn)兩個(gè)問(wèn)題:1、為什么不建議使用LSI作為時(shí)鐘源來(lái)設(shè)計(jì)日歷? 2、兩個(gè)實(shí)例工程之間的差別? 將實(shí)例中使用“LSE”時(shí)鐘改為“LSI”時(shí)鐘,其他地方不該可以嗎?【在下面解答】

2.RTC分頻:

本文實(shí)例代碼是:RTC_SetPrescaler(32768-1);

外部低速時(shí)鐘頻率為32.768K,我們要達(dá)到1秒計(jì)數(shù)(RTC_CNT)一次,則需要分頻32768.

3.RTC中斷:

RTC中斷有三種:

RTC_IT_SEC秒中斷

RTC_IT_ALR鬧鐘中斷

RTC_IT_OW(計(jì)數(shù))溢出中斷

本文實(shí)例是:RTC_ITConfig(RTC_IT_SEC, ENABLE);

使能RTC_IT_SEC秒中斷,間隔1秒中斷一次,打印日歷。

再次強(qiáng)調(diào):

這里的“秒中斷”是概念上的秒中斷,它的中斷間隔時(shí)間是根據(jù)你選擇的時(shí)鐘源和分頻值決定的,并非真正的1秒鐘中斷一次。本文提供的實(shí)例是1秒鐘中斷一次。

4.RTC日歷的來(lái)由:

在文章開(kāi)頭已經(jīng)說(shuō)了,F(xiàn)1系列中RTC只要RTC_CNT寄存器,不像F0、F4等有現(xiàn)成的日歷(年月日時(shí)分秒)寄存器,因此,我們是通過(guò)軟件換算而得來(lái)的日歷。

Ⅳ、源代碼分析

筆者以F1標(biāo)準(zhǔn)外設(shè)庫(kù)(同時(shí)也建議初學(xué)者使用官方的標(biāo)準(zhǔn)外設(shè)庫(kù))為基礎(chǔ)建立的工程,主要以庫(kù)的方式來(lái)講述(若您的F1芯片與提供工程不一樣,可微信回復(fù)“修改型號(hào)”)。

下面將講述關(guān)于“RTC秒中斷”重要的、容易弄錯(cuò)的幾點(diǎn):

1.RCC時(shí)鐘源

該函數(shù)位于bsp.c文件下面;

RCC是很多初學(xué)者,甚至已經(jīng)工作的朋友容易遺漏的地方,有很多朋友覺(jué)得它使用的外設(shè)不正常,很大部分是沒(méi)有配置RCC導(dǎo)致的。

重點(diǎn)注意:

A.外設(shè)RCC時(shí)鐘的配置要在其外設(shè)初始化的前面;

B.匹配對(duì)應(yīng)時(shí)鐘。

比如:RCC_APB2外設(shè)不要配置在RCC_APB1時(shí)鐘里面

【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);這樣能編譯通過(guò),但這是錯(cuò)誤的代碼】

2. RTC配置

該函數(shù)位于rtc.c文件下面;

該函數(shù)請(qǐng)結(jié)合參考手冊(cè)(框圖和寄存器)理解。

注意4點(diǎn):

A.使能后備區(qū)域:PWR_BackupAccessCmd(ENABLE);

從系統(tǒng)框圖可以看見(jiàn)RTC有陰影部分,其實(shí)這部分就是后備區(qū)域。因此,需要使能,這也是為什么上面需要配置RCC時(shí)鐘的原因。

B.選擇RTC時(shí)鐘源:RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

在原理描述中說(shuō)了,RTC時(shí)鐘源有三種:

RCC_RTCCLKSource_LSE

RCC_RTCCLKSource_LSI

RCC_RTCCLKSource_HSE_Div128

可以在源代碼中查看其參數(shù),也是有3中可以選擇。

C.使能RTC鬧鐘中斷:RTC_ITConfig(RTC_IT_SEC, ENABLE);

RTC有三類中斷:

RTC_IT_SEC秒中斷

RTC_IT_ALR鬧鐘中斷

RTC_IT_OW(計(jì)數(shù))溢出中斷

上一篇文章提供的拓展功能“RTC鬧鐘”就是使用鬧鐘中斷,可以下載實(shí)例工程查看源代碼。

D.RTC分頻:RTC_SetPrescaler(32767);

我們是為了得到真正的1秒鐘中斷一次。

3. RTC初始化

該函數(shù)位于rtc.c文件下面;

A.我們使用BKP保存“標(biāo)志位”數(shù)據(jù)(第一次才初始化,后面就不用初始化了)。我們初始化時(shí)間為:2016年7月18日 18:00:00(假如為當(dāng)前值)。 如果有電池,則會(huì)按照這個(gè)時(shí)間一直持續(xù)下去,系統(tǒng)掉電之后也不會(huì)影響時(shí)鐘的計(jì)數(shù)。

B.第二次及以后上電需要等待RTC與RTC_APB時(shí)鐘同步。

C.使能RTC秒中斷,我們用于測(cè)試并打印RTC日歷數(shù)據(jù)。如果你的應(yīng)用是直接讀取RTC日歷,不是想我們實(shí)例那樣中斷打印數(shù)據(jù),則可以不開(kāi)啟該中斷。

4. RTC讀寫(xiě)描述

該結(jié)構(gòu)體位于rtc.h文件下面;

這要就是用于讀寫(xiě)用(這樣直接傳遞一個(gè)參數(shù)就行了,不用傳遞“一串”整形變量)

該函數(shù)位于rtc.c文件下面;

RTC日歷寫(xiě)(設(shè)置)函數(shù),這個(gè)函數(shù)是筆者整理并經(jīng)過(guò)項(xiàng)目驗(yàn)證的,可直接調(diào)用。

注意:

參數(shù)不能越界(超出范圍),超出范圍會(huì)返回錯(cuò)誤。

該函數(shù)位于rtc.c文件下面;

RTC日歷讀(獲?。┖瘮?shù),這個(gè)函數(shù)是筆者整理并經(jīng)過(guò)項(xiàng)目驗(yàn)證的,可直接調(diào)用。

注意:

需要配置RTC并初始化RTC值才會(huì)讀出正確的日歷值。

Ⅴ、解答問(wèn)題

上面筆者留下的問(wèn)題或許對(duì)于初學(xué)者不是很關(guān)心,但對(duì)于在工作中,需要實(shí)際項(xiàng)目的開(kāi)發(fā)的人應(yīng)該比較有幫助。

1、為什么不建議使用LSI作為時(shí)鐘源來(lái)設(shè)計(jì)日歷?

原因在于LSI不是屬于后備區(qū)域,而RTC日歷部分是屬于后備局域(見(jiàn)上圖),也就是說(shuō)系統(tǒng)一旦掉電,RTC時(shí)鐘就不能工作了。

2、兩個(gè)實(shí)例工程之間的差別? 將實(shí)例中使用“LSE”時(shí)鐘改為“LSI”時(shí)鐘,其他地方不該可以嗎?

這個(gè)地方和第一個(gè)問(wèn)題有關(guān)聯(lián),修改后的工程程序會(huì)死在等待時(shí)鐘同步的地方。

Ⅵ、說(shuō)明

這篇文章是結(jié)合前幾篇文章來(lái)講述的,可以在微信“歷史消息”中查看。

關(guān)于筆者提供的軟件工程實(shí)例,可關(guān)注微信,在會(huì)話框回復(fù)“關(guān)于工程”,有關(guān)于工程結(jié)構(gòu)描述、型號(hào)修改等講述。

以上總結(jié)僅供參考,若有不對(duì)之處,敬請(qǐng)諒解。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

一、在STM32中,有5個(gè)時(shí)鐘源,為HSI,HSE,LSI,LSE,PLL.①HSI是高速內(nèi)部時(shí)鐘,RC振蕩器,頻率為8MHz;②HSE--高速外部時(shí)鐘,可接石英或者陶瓷諧振器,或者外部時(shí)鐘源,頻率范圍4MHz--15M...

關(guān)鍵字: STM32 stm32f10x 時(shí)鐘配置

;******************** (C) COPYRIGHT 2010 STMicroelectronics ********************;* File Name: startup_stm32f10...

關(guān)鍵字: stm32f10x 啟動(dòng)代碼

環(huán)境:STM32F10x 3.5固件庫(kù)。下載地址http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f10x_stdp...

關(guān)鍵字: stm32f10x 新建工程

USB速度慢的原因有以下幾種可能:1、協(xié)議問(wèn)題 全速的USB設(shè)備,最大速度12Mb/s,但是如果跑的是HID之類慢速設(shè)備的協(xié)議,那么速度就沒(méi)有那么快了,理論上只有1.5Mb/s。2、配置問(wèn)題 USB配置描述符中有關(guān)于接收...

關(guān)鍵字: stm32f10x usb速度慢

Ⅰ、概述RTC(Real Time Clock)是實(shí)時(shí)時(shí)鐘的意思,它其實(shí)和TIM有點(diǎn)類似,也是利用計(jì)數(shù)的原理,選擇RTC時(shí)鐘源,再進(jìn)行分頻,到達(dá)計(jì)數(shù)的目的。該文主要講述關(guān)于RTC的秒中斷功能,這個(gè)功能類似SysTick系...

關(guān)鍵字: rtc stm32f10x 秒中斷

先從最簡(jiǎn)單的問(wèn)題開(kāi)始,用STM32外部中斷的方法實(shí)現(xiàn)PB.0按鍵控制PA.0LED燈:先總的說(shuō)下實(shí)現(xiàn)中斷的步驟:1,配置NVIC寄存器(函數(shù)),設(shè)置中斷為第幾組,占先優(yōu)先級(jí)和次優(yōu)先級(jí); 函數(shù)方法: void NVIC_C...

關(guān)鍵字: gpio stm32f10x 外部中斷

? ? ? ? stm32是自帶硬件I2C,相比于軟件模擬I2c,硬件I2c效率更高。但是據(jù)說(shuō)不穩(wěn)定,這個(gè)我倒暫時(shí)還沒(méi)有體會(huì)到。? ? ? ? 在最開(kāi)始使用硬件I2c的時(shí)候,程序總是卡死,要不從一開(kāi)始

關(guān)鍵字: i2c STM32 stm32f10x

SysTick定時(shí)器被集成在NVIC中。因此,只要是Cortex-M3內(nèi)核的單片機(jī),就都有它。這個(gè)學(xué)習(xí)筆記就用SysTick定時(shí)器來(lái)實(shí)現(xiàn)走馬燈的功能。SysTick定時(shí)器非常簡(jiǎn)答,只有四個(gè)寄存器。這四個(gè)寄存器的含義在《C...

關(guān)鍵字: stm32f10x systick 定時(shí)器

Ⅰ、寫(xiě)在前面關(guān)注我分享文章的朋友應(yīng)該知道我在前面講述過(guò)(軟件、硬件)I2C主機(jī)控制從機(jī)EEPROM的例子。在I2C通信主機(jī)控制程序是比較常見(jiàn)的一種,可以說(shuō)在實(shí)際項(xiàng)目中,很多應(yīng)用都會(huì)使用到I2C通信。但在實(shí)際項(xiàng)目中作為

關(guān)鍵字: stm32f10x 中斷接收 主從通信 硬件i2c 輪詢發(fā)送

  簡(jiǎn)單的一種應(yīng)用,ARM芯片作為master,flash為slaver,實(shí)現(xiàn)單對(duì)單通信。ARM主控芯片STM32F103,flash芯片為MACRONIX INTERNATIONAL的MX25L6465E,64Mbit...

關(guān)鍵字: spi stm32f10x 操作flash mx25l64 讀寫(xiě)數(shù)據(jù)
關(guān)閉