欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32寄存器工程-點亮一顆LED
[打印本頁]
作者:
夢逸
時間:
2017-12-25 20:39
標題:
STM32寄存器工程-點亮一顆LED
關于STM32寄存器工程入門之點亮一顆LED
以下為自己學習寄存器版本STM3整理后的工程,使用位段方法方法實現。帶詳細注釋備注,可供學習參考。
1.PNG
(117.18 KB, 下載次數: 50)
下載附件
2017-12-25 20:38 上傳
單片機源程序如下:
#include "sys.h"
#include "stm32f407xx.h"
//////////////////////////////////////////////////////////////////////////////////
//ALIENTEK STM32F407開發板
//系統時鐘初始化
//包括時鐘設置/中斷管理/GPIO設置等
//創建日期:2017.9.12
//********************************************************************************
//GPIOF設置
//MODE:0~3;模式選擇,0,輸入(系統復位默認狀態);1,普通輸出;2,復用功能;3,模擬輸入.
//OTYPE:0/1;輸出類型選擇,0,推挽輸出;1,開漏輸出.
//OSPEED:0~3;輸出速度設置,0,2Mhz;1,25Mhz;2,50Mhz;3,100Mh.
//PUPD:0~3:上下拉設置,0,不帶上下拉;1,上拉;2,下拉;3,保留.
//注意:在輸入模式(普通輸入/模擬輸入)下,OTYPE和OSPEED參數無效!!
void GPIOF_Set(u8 pin,u8 mode, u8 otype,u8 ospeed,u8 updow)
{
//配置為輸出
GPIOF_MODER &=~(3<<(pin*2)); //先清除原來的設置 1111 01 1111
GPIOF_MODER |=(mode<<(pin*2); //設置新的模式
//配置2M響應速度
GPIOF_OSPEEDR &=~(3<<(pin*2)); //清除原來的設置
GPIOF_OSPEEDR |=(ospeed<<(pin*2));//設置新的速度值
//配置推挽還是開漏
GPIOF_OTYPER &=~(1<<pin) ; //清除原來的設置
GPIOF_OTYPER|=otype<<pin; //設置新的輸出模式
//配置是否采用上下拉
GPIOF_PUPD &=~(3<<(pin*2)); //先清除原來的設置
GPIOF_PUPD |=updow<<(pin*2); //設置新的上下拉
}
//時鐘設置函數
//Fvco=Fs*(plln/pllm);
//Fsys=Fvco/pllp=Fs*(plln/(pllm*pllp));
//Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));
//Fvco:VCO頻率
//Fsys:系統時鐘頻率
//Fusb:USB,SDIO,RNG等的時鐘頻率
//Fs:PLL輸入時鐘頻率,可以是HSI,HSE等.
//plln:主PLL倍頻系數(PLL倍頻),取值范圍:64~432.
//pllm:主PLL和音頻PLL分頻系數(PLL之前的分頻),取值范圍:2~63.
//pllp:系統時鐘的主PLL分頻系數(PLL之后的分頻),取值范圍:2,4,6,8.(僅限這4個值!)
//pllq:USB/SDIO/隨機數產生器等的主PLL分頻系數(PLL之后的分頻),取值范圍:2~15.
//外部晶振為8M的時候,推薦值:plln=336,pllm=8,pllp=2,pllq=7.
//得到:Fvco=8*(336/8)=336Mhz
// Fsys=336/2=168Mhz
// Fusb=336/7=48Mhz
//返回值:0,成功;1,失敗。
u8 Sys_Clock_Set(u32 plln,u32 pllm,u32 pllp,u32 pllq)
{
u16 retry=0;
u8 status=0;
RCC_CR|=1<<16; //HSE 開啟,開啟外部高速時鐘
while(((RCC_CR&(1<<17))==0)&&(retry<0X1FFF))retry++;//等待HSE RDY
if(retry==0X1FFF)status=1; //HSE無法就緒
else
{
RCC_APB1ENR | =1<<28; //電源接口時鐘使能
PWR_CR | =3<<14; //高性能模式,時鐘可到168Mhz
RCC_CFGR | =(0<<4)|(5<<10)|(4<<13);//HCLK 不分頻;APB1 4分頻,42M;APB2 2分頻.84M
RCC_CR & =~(1<<24); //關閉主PLL
RCC_PLLCFGR=pllm|(plln<<6)|(((pllp>>1)-1)<<16)|(pllq<<24)|(1<<22);//配置主PLL,PLL時鐘源來自HSE
RCC_CR | =1<<24; //打開主PLL
while((RCC_CR &(1<<25))==0);//等待PLL準備好
FLASH_ACR | =1<<8; //指令預取使能.
FLASH_ACR | =1<<9; //指令cache使能.
FLASH_ACR | =1<<10; //數據cache使能.
FLASH_ACR | =5<<0; //5個CPU等待周期.
RCC_CFGR & =~(3<<0); //清零
RCC_CFGR | =2<<0; //選擇主PLL作為系統時鐘
while((RCC_CFGR & (3<<2))!=(2<<2));//等待主PLL作為系統時鐘成功.
}
return status;
}
//系統時鐘初始化函數
//plln:主PLL倍頻系數(PLL倍頻),取值范圍:64~432.
//pllm:主PLL和音頻PLL分頻系數(PLL之前的分頻),取值范圍:2~63.
//pllp:系統時鐘的主PLL分頻系數(PLL之后的分頻),取值范圍:2,4,6,8.(僅限這4個值!)
//pllq:USB/SDIO/隨機數產生器等的主PLL分頻系數(PLL之后的分頻),取值范圍:2~15.
void STM32_Glock_Init(u32 plln,u32 pllm,u32 pllp,u32pllq)
{
RCC_CR | =0x00000001; //設置HISON,開啟內部高速RC振蕩。開啟內部高速時鐘
RCC_CFGR=0x00000000; //CFGR清零
RCC_CR & =0xFEF6FFFF; //HSEON,CSSON,PLLON清零 ,F1110F0110FFFF
RCC_PLLCFGR=0x24003010; //PLLCFGR恢復復位值
RCC_CR & =~(1<<18); //HSEBYP清零,外部晶振不旁路
RCC_CIR=0x00000000; //禁止RCC時鐘中斷 。C:時鐘。I:中斷
Sys_Clock_Set(plln,pllm,pllp,pllq);//設置時鐘 ,啟動外部時鐘,配置
}
復制代碼
所有資料51hei提供下載:
點亮一顆LED燈.rar
(118.58 KB, 下載次數: 36)
2017-12-25 20:38 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
chenhao1010
時間:
2018-11-15 17:22
新手學習
作者:
噼里啪啦12135
時間:
2018-11-15 21:45
新手學習
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1