中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

南昌網(wǎng)站建設(shè)設(shè)計廣告營銷案例分析

南昌網(wǎng)站建設(shè)設(shè)計,廣告營銷案例分析,平價網(wǎng)站建設(shè),上傳視頻網(wǎng)站開發(fā)前言: 比起之前用過的三星的獵戶座4412芯片,STM32F4的系統(tǒng)時鐘可以說是小巫見大巫,首先我們需要清晰時鐘產(chǎn)生的原理:幾乎大多數(shù)的芯片都是由晶振產(chǎn)生一個比較低頻的頻率,然后通過若干個PLL得到單片機(jī)能承受的頻率&…

?前言:

?????????比起之前用過的三星的獵戶座4412芯片,STM32F4的系統(tǒng)時鐘可以說是小巫見大巫,首先我們需要清晰時鐘產(chǎn)生的原理:幾乎大多數(shù)的芯片都是由晶振產(chǎn)生一個比較低頻的頻率,然后通過若干個PLL得到單片機(jī)能承受的頻率(作為主頻),再通過其他手段將PLL出來的頻率降頻分給其他外設(shè)使用。一個時鐘樹一般先對復(fù)雜,我們先調(diào)出主頻(及編程好時鐘源、PLL倍頻這一部分)其他的之后再說,如此編程才不會太復(fù)雜。

????????實際上這個一般廠家會給一個配置文件的,但是如果要自己做些超頻之類的操作,就要徹底掌握時鐘樹的配置了,見人見智,追求技術(shù)的這個內(nèi)容是逃不掉的。

????????編程思路:1.PLL倍頻因子配置 2..PLL時鐘源激活和切換(上電后單片機(jī)會選擇一個默認(rèn)的時鐘源,可能是晶振也可能是內(nèi)部RC電路產(chǎn)生的頻率) 3.切換系統(tǒng)時鐘

時鐘資源概覽:

????????下面先看一下我們這個F4的系統(tǒng)時鐘資源,查看手冊可知系統(tǒng)復(fù)位后是默認(rèn)選擇HSI這個內(nèi)部RC電路產(chǎn)生的時鐘作為這個單片機(jī)的系統(tǒng)時鐘,但是我們要的是PLL產(chǎn)生的時鐘。

????????下面看手冊PLL配置的說明(可以把時鐘樹截圖出來作參考,不過主要編程還是靠手冊的文字描述),可知RCC_PLLCFGR 可以用來配置PLL (PLLI2S可以先不管,先搞出主頻再說),那就配置它吧。寄存器就不放出來了,自己看手冊,這里給出寄存器各個位的配置值及解釋

RCC_PLLCFGR寄存器配置

可見:
PLL = VCO / PLLP
VCO = PLL時鐘源*(PLLN / PLLM)
一共涉及P / N / M 三個因子,以及PLL時鐘源。
PLL就是我們要選的系統(tǒng)時鐘,PLL = 168M,如果PLLP選的是2,那么VCO就得是168*2 = 336 。VCO是336,我們的PLL時鐘源如果選的是外部晶振(探索者這個開發(fā)板上晶振是8M),那么PLLN/PLLM就得等于 VCO / PLL時鐘源 = 336 / 8 = 42 ,所以PLLN除以PLLM必須是等于42,PLLN配置為336(可以在192和432這個數(shù)值間任意取),則PLLM配置為 336 / 42 = 8 .分頻因子就搞定了。
下面開始配置 RCC_PLLCFGR
bit[5:0]:? ? 設(shè)置PLLM為8,即0x8<<0
bit[14:6]:? 設(shè)置PLLN為336,即336<<6
bit[17:16]:設(shè)置PLLP為2,即0<<16
bit[22]:? ? ?設(shè)置PLL和PLLI2S時鐘源,設(shè)為1<<22,選擇HES晶振
bit[27:24]:設(shè)置USB OTG之類的時鐘,隨便設(shè)一個,0x7<<24
其他使用默認(rèn)值,編程如下:
RCC->PLLCFGR =?0x24003010 ;//復(fù)位值
RCC->PLLCFGR = 0x7<<24 | 1<<22 | 0<<16 |?336<<6 |?0x8<<0 ;
這樣PLL就配置好了,PLL的時鐘源我們選擇的是HES,它還沒有激活,所以 在PLL配置這一步之前,還需要將HSE激活

RCC_CR寄存器配置

查看手冊HSE部分,可知要換時鐘源要操作RCC_CR寄存器,時鐘中斷我們不需要。
同樣,配置寄存器RCC_CR:(真真苦力活~)
bit[0]:? ? HSI的開關(guān),這個呢暫時還不能關(guān)閉,要讓HSE生效之后才能關(guān)閉,不然單片機(jī)一個時鐘都沒有沒法工作。
bit[1]:? ? HSI的狀態(tài) 1是ok,0是不ok
bit[16]:? HSE的開關(guān),置為1<<16,打開
bit[17]:? HSE的狀態(tài),它就緒之后才能配置PLL,配置完P(guān)LL才能切換系統(tǒng)時鐘(HSI時鐘---->>PLL時鐘)
bit[18]:? HSE時鐘旁路,這個要關(guān)掉,因為我們要用的是HSE晶振,配置為0<<18
bit[24]:? PLL的開關(guān),這個還沒配置好之前要關(guān)掉
bit[25]:PLL是否穩(wěn)定的標(biāo)志
其他不管,RCC->CR復(fù)位時的默認(rèn)值是 讓HSI正常工作的,其他都是0,所以不改動它原有的,在它原有的值基礎(chǔ)上進(jìn)行幅值
1.配置使得HSE開始工作:
RCC->CR | =?1<<16;
u16 retry=0;//這個只是提供短暫延時的變量
while(((RCC->CR&(1<<17))==0)&&(retry<0X1FFF))retry++;//跳出循環(huán)后說明HSE ok了
if(retry==0X1FFF)status=1;?? ?//當(dāng)然如果超過了一定時間也會跳出,表示HSE無法就緒

2.打開PLL并等待其穩(wěn)定

RCC->CR|=1<<24;			//打開主PLL
while((RCC->CR&(1<<25))==0);//等待PLL準(zhǔn)備好 

使PLL倍頻出很高的頻率

有了上面的東西,我們就可以使PLL倍頻出很高的頻率了,結(jié)合上面兩個寄存器:

RCC->PLLCFGR = 0x7<<24 | 1<<22 |?0<<16 |?336<<6 |?0x8<<0 ;//配置PLL倍頻因子RCC->CR | =?1<<16;//激活HSE晶振
u16 retry=0;//這個只是提供短暫延時的變量
while(((RCC->CR&(1<<17))==0)&&(retry<0X1FFF))retry++;//跳出循環(huán)后說明HSE ok了
if(retry==0X1FFF)status=1;?else{//激活HSE完成了RCC->CR|=1<<24;			//打開主PLLwhile((RCC->CR&(1<<25))==0);//PLL穩(wěn)定}

現(xiàn)在PLL理論上已經(jīng)有了晶振倍頻后的頻率了,下面切換PLL作為系統(tǒng)時鐘:

切換PLL作為系統(tǒng)時鐘

查看手冊,知道RCC_CFGR是管這個事的:再一波嘎嘎配置

bit[1:0]:0x2<<0? ? ? ? 切換PLL作為系統(tǒng)時鐘

bit[3:2]:這兩個位可以讀出是否切換完成,如果讀出來是0x2就是切換成PLL成功

bit[7:4]:這四個位是配置AHB分頻的,我記得是不分頻的,設(shè)為0000 即0x0<<4

bit[12:10]:?這三個位是配置APB1分頻的 設(shè)為4分頻,即0x5<<10

bit[15:13]:這三個位是配置APB2分頻的 設(shè)為2分頻,即0x4<<13

bit[20:16]:這五個位是配置RTC分頻的 可以先隨便設(shè)一個設(shè)為HSE/2,即0x2<<16

其他不用管


?

RCC_CFGR = 0;//清零RCC_CFGR =?0x2<<16 |?0x4<<13 | 0x5<<10 | 0x0<<4 |?0x2<<0 ;//切換PLL為系統(tǒng)時鐘并且設(shè)置其他分頻while((RCC->CFGR&(3<<2))!=(2<<2));//等待主PLL作為系統(tǒng)時鐘成功.?

這樣,綜合上面所有的代碼就是:

    u16 retry=0;//這個只是提供短暫延時的變量u8 status=0;   //按照上面的分析思路,編程流程就是://1.配置PLL倍頻因子RCC->PLLCFGR = 0x7<<24 | 1<<22 |0<<16 |336<<6 |0x8<<0 ;//2.激活HSE晶振RCC->CR |= 1<<16;while(((RCC->CR&(1<<17))==0)&&(retry<0X1FFF))retry++;//跳出循環(huán)后說明HSE ok了if(retry==0X1FFF)status=1;else{//激活HSE完成了//3.打開PLL等待PLL輸出穩(wěn)定RCC->CR|=1<<24;			while((RCC->CR&(1<<25))==0);//4.切換PLL輸出為系統(tǒng)時鐘RCC->CFGR = 0;//清零RCC->CFGR =0x2<<16 |0x4<<13 | 0x5<<10 | 0x0<<4 |0x2<<0;//切換PLL為系統(tǒng)時鐘并且設(shè)置其他分頻while((RCC->CFGR&(3<<2))!=(2<<2));//等待主PLL作為系統(tǒng)時鐘成功.現(xiàn)在主頻是168M了}

驗證測試:

下面可以用串口來打印,驗證是不是設(shè)置完成。

可見是ok了的~說明上面的系統(tǒng)時鐘配置沒問題。main函數(shù)

疑難雜癥:

如果你的整個main函數(shù)是這樣的:是配置完時鐘后也是沒法正常工作的

#include "sys.h"
#include "usart.h" 
#include "delay.h" u16 myconut;
//systick中斷服務(wù)函數(shù),使用OS時用到
void SysTick_Handler(void)
{	myconut++;if(myconut>=1000){myconut=0;printf("hello\r\n");}}int main(void)
{ u8 t=0;u16 retry=0;//這個只是提供短暫延時的變量u8 status=0;//按照上面的分析思路,編程流程就是://1.配置PLL倍頻因子RCC->PLLCFGR = 0x7<<24 | 1<<22 |0<<16 |336<<6 |0x8<<0 ;//2.激活HSE晶振RCC->CR |= 1<<16;while(((RCC->CR&(1<<17))==0)&&(retry<0X1FFF))retry++;//跳出循環(huán)后說明HSE ok了if(retry==0X1FFF)status=1;else{//激活HSE完成了//3.打開PLL等待PLL輸出穩(wěn)定RCC->CR|=1<<24;			while((RCC->CR&(1<<25))==0);//4.切換PLL輸出為系統(tǒng)時鐘RCC->CFGR = 0;//清零RCC->CFGR =0x2<<16 |0x4<<13 | 0x5<<10 | 0x0<<4 |0x2<<0;//切換PLL為系統(tǒng)時鐘并且設(shè)置其他分頻while((RCC->CFGR&(3<<2))!=(2<<2));//等待主PLL作為系統(tǒng)時鐘成功.現(xiàn)在主頻是168M了}delay_init(168);		//初始化延時函數(shù)NVIC_SetPriorityGrouping(2);SysTick_Config(168000);//1ms中斷一次NVIC_EnableIRQ(SysTick_IRQn);uart_init(84,115200);	//串口初始化為115200while(1){}
}

原因是缺少了這樣幾行關(guān)于CPU的代碼:將它加在時鐘配置代碼的上方即可正常運行了

    	FLASH->ACR|=1<<8;		//指令預(yù)取使能.FLASH->ACR|=1<<9;		//指令cache使能.FLASH->ACR|=1<<10;		//數(shù)據(jù)cache使能.FLASH->ACR|=5<<0;		//5個CPU等待周期. 

????????正點原子是把它放在時鐘配置里的,我也不知道為啥,但是我覺得它和時鐘配置是沒什么關(guān)系的,應(yīng)該是另一部分的知識。正點原子時鐘配置中還有這樣兩句關(guān)于電源的代碼,我實測去掉也是可以的,不過應(yīng)該還是加上比較好,但是時鐘配置的部分手冊沒有提到,我也就沒有在上面說,以免它出現(xiàn)的很突兀。同樣要加的話加在時鐘配置代碼之前即可。

		RCC->APB1ENR|=1<<28;	//電源接口時鐘使能PWR->CR|=3<<14; 		//高性能模式,時鐘可到168Mhz

完事了~系統(tǒng)時鐘就是這樣配置啦,這個算是簡單的,像能跑linux的那種芯片,就得依靠廠家給的來寫或者修改了,自己寫的總有不到位的地方~

整個main.c代碼如下:

#include "sys.h"
#include "usart.h" 
#include "delay.h" 
//ALIENTEK 探索者STM32F407開發(fā)板 實驗0
//新建工程實驗  
//技術(shù)支持:www.openedv.com
//廣州市星翼電子科技有限公司
u16 myconut;
//systick中斷服務(wù)函數(shù),使用OS時用到
void SysTick_Handler(void)
{	myconut++;if(myconut>=1000){myconut=0;printf("hello\r\n");}}int main(void)
{ u8 t=0;//plln,pllm,pllp,pllq//Stm32_Clock_Init(336,8,2,7);//設(shè)置時鐘,168Mhzu16 retry=0;//這個只是提供短暫延時的變量u8 status=0;//CPU相關(guān)的初始化FLASH->ACR|=1<<8;		//指令預(yù)取使能.FLASH->ACR|=1<<9;		//指令cache使能.FLASH->ACR|=1<<10;		//數(shù)據(jù)cache使能.FLASH->ACR|=5<<0;		//5個CPU等待周期. //電源相關(guān)的初始化RCC->APB1ENR|=1<<28;	//電源接口時鐘使能PWR->CR|=3<<14; 		//高性能模式,時鐘可到168Mhz//按照博客的分析思路,系統(tǒng)時鐘配置的編程流程就是://1.配置PLL倍頻因子RCC->PLLCFGR = 0x7<<24 | 1<<22 |0<<16 |336<<6 |0x8<<0 ;//2.激活HSE晶振RCC->CR |= 1<<16;while(((RCC->CR&(1<<17))==0)&&(retry<0X1FFF))retry++;//跳出循環(huán)后說明HSE ok了if(retry==0X1FFF)status=1;else{//激活HSE完成了//3.打開PLL等待PLL輸出穩(wěn)定RCC->CR|=1<<24;			while((RCC->CR&(1<<25))==0);//4.切換PLL輸出為系統(tǒng)時鐘RCC->CFGR = 0;//清零RCC->CFGR =0x2<<16 |0x4<<13 | 0x5<<10 | 0x0<<4 |0x2<<0;//切換PLL為系統(tǒng)時鐘并且設(shè)置其他分頻while((RCC->CFGR&(3<<2))!=(2<<2));//等待主PLL作為系統(tǒng)時鐘成功.現(xiàn)在主頻是168M了}delay_init(168);		//初始化延時函數(shù)NVIC_SetPriorityGrouping(2);SysTick_Config(168000);//1ms中斷一次NVIC_EnableIRQ(SysTick_IRQn);uart_init(84,115200);	//串口初始化為115200while(1){}
}

http://www.risenshineclean.com/news/55773.html

相關(guān)文章:

  • 怎么申請自己的網(wǎng)站網(wǎng)址推廣賺錢的微信小程序
  • 封面型網(wǎng)頁網(wǎng)站有哪些優(yōu)秀網(wǎng)站設(shè)計欣賞
  • 打開網(wǎng)站彈出圖片代碼軟文推廣公司
  • flash教程網(wǎng)站首頁愛站查詢
  • 江西博網(wǎng)科技發(fā)展有限公司專業(yè)搜索引擎seo合作
  • 中文域名網(wǎng)站鏈接無法打開百度推廣網(wǎng)站一年多少錢
  • win2008系統(tǒng)做網(wǎng)站廣告設(shè)計公司
  • 網(wǎng)站設(shè)計做好的網(wǎng)站怎么優(yōu)化
  • 個人網(wǎng)站建設(shè)在哪里企業(yè)培訓(xùn)考試app
  • 淘寶代購網(wǎng)站怎么做網(wǎng)站推廣策劃書模板
  • 西寧網(wǎng)站建設(shè)加盟代理app營銷模式有哪些
  • 桂林網(wǎng)站建設(shè)公司鎮(zhèn)江百度公司
  • 山西住房城鄉(xiāng)建設(shè)部網(wǎng)站網(wǎng)店運營怎么學(xué)
  • 長安網(wǎng)站建設(shè)做百度網(wǎng)站一年多少錢
  • 網(wǎng)站開發(fā)定制模板網(wǎng)站建設(shè)抖音seo排名系統(tǒng)哪個好用
  • 岳陽網(wǎng)站設(shè)計改版電子商務(wù)seo
  • 做門戶網(wǎng)站的系統(tǒng)seo公司賺錢嗎
  • 2019做網(wǎng)站賺錢么企業(yè)培訓(xùn)課程ppt
  • 網(wǎng)站截圖怎么做互聯(lián)網(wǎng)平臺推廣怎么做
  • 網(wǎng)站建設(shè)神器現(xiàn)在做網(wǎng)絡(luò)推廣都有什么方式
  • 怎么給網(wǎng)站命名青島seo關(guān)鍵詞
  • 手機(jī)網(wǎng)站開發(fā)企業(yè)網(wǎng)站推廣的形式有
  • 做ppt到哪個網(wǎng)站找圖片網(wǎng)絡(luò)營銷推廣方案前言
  • c#做asp.net網(wǎng)站余姚網(wǎng)站seo運營
  • wordpress頭條主題中國seo第一人
  • 怎么免費建立自己網(wǎng)站網(wǎng)站推廣優(yōu)化的方法
  • 官網(wǎng)站內(nèi)推廣內(nèi)容seo快速推廣竅門大公開
  • 重慶企業(yè)網(wǎng)站建設(shè)解決方案百度銷售系統(tǒng)
  • 無錫做網(wǎng)站排名上海市人大常委會
  • 贊賞分享wordpress代碼360優(yōu)化大師官方官網(wǎng)