久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4400|回復: 2
打印 上一主題 下一主題
收起左側

STM32寄存器工程-點亮一顆LED

[復制鏈接]
跳轉到指定樓層
樓主
關于STM32寄存器工程入門之點亮一顆LED
以下為自己學習寄存器版本STM3整理后的工程,使用位段方法方法實現。帶詳細注釋備注,可供學習參考。


單片機源程序如下:
  1. #include "sys.h"  
  2. #include "stm32f407xx.h"
  3. //////////////////////////////////////////////////////////////////////////////////         
  4. //ALIENTEK STM32F407開發板
  5. //系統時鐘初始化       
  6. //包括時鐘設置/中斷管理/GPIO設置等
  7. //創建日期:2017.9.12
  8. //********************************************************************************

  9. //GPIOF設置
  10. //MODE:0~3;模式選擇,0,輸入(系統復位默認狀態);1,普通輸出;2,復用功能;3,模擬輸入.
  11. //OTYPE:0/1;輸出類型選擇,0,推挽輸出;1,開漏輸出.
  12. //OSPEED:0~3;輸出速度設置,0,2Mhz;1,25Mhz;2,50Mhz;3,100Mh.
  13. //PUPD:0~3:上下拉設置,0,不帶上下拉;1,上拉;2,下拉;3,保留.
  14. //注意:在輸入模式(普通輸入/模擬輸入)下,OTYPE和OSPEED參數無效!!
  15. void GPIOF_Set(u8 pin,u8 mode, u8 otype,u8 ospeed,u8 updow)
  16. {
  17.         //配置為輸出
  18.         GPIOF_MODER &=~(3<<(pin*2));        //先清除原來的設置 1111 01 1111
  19.         GPIOF_MODER |=(mode<<(pin*2);        //設置新的模式
  20.         //配置2M響應速度
  21.         GPIOF_OSPEEDR &=~(3<<(pin*2));        //清除原來的設置
  22.         GPIOF_OSPEEDR |=(ospeed<<(pin*2));//設置新的速度值  
  23.         //配置推挽還是開漏
  24.         GPIOF_OTYPER &=~(1<<pin) ;                //清除原來的設置
  25.         GPIOF_OTYPER|=otype<<pin;                //設置新的輸出模式
  26.         //配置是否采用上下拉
  27.         GPIOF_PUPD &=~(3<<(pin*2));        //先清除原來的設置
  28.         GPIOF_PUPD |=updow<<(pin*2);        //設置新的上下拉
  29. }

  30. //時鐘設置函數
  31. //Fvco=Fs*(plln/pllm);
  32. //Fsys=Fvco/pllp=Fs*(plln/(pllm*pllp));
  33. //Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));

  34. //Fvco:VCO頻率
  35. //Fsys:系統時鐘頻率
  36. //Fusb:USB,SDIO,RNG等的時鐘頻率
  37. //Fs:PLL輸入時鐘頻率,可以是HSI,HSE等.
  38. //plln:主PLL倍頻系數(PLL倍頻),取值范圍:64~432.
  39. //pllm:主PLL和音頻PLL分頻系數(PLL之前的分頻),取值范圍:2~63.
  40. //pllp:系統時鐘的主PLL分頻系數(PLL之后的分頻),取值范圍:2,4,6,8.(僅限這4個值!)
  41. //pllq:USB/SDIO/隨機數產生器等的主PLL分頻系數(PLL之后的分頻),取值范圍:2~15.

  42. //外部晶振為8M的時候,推薦值:plln=336,pllm=8,pllp=2,pllq=7.
  43. //得到:Fvco=8*(336/8)=336Mhz
  44. //     Fsys=336/2=168Mhz
  45. //     Fusb=336/7=48Mhz
  46. //返回值:0,成功;1,失敗。
  47. u8 Sys_Clock_Set(u32 plln,u32 pllm,u32 pllp,u32 pllq)
  48. {
  49.         u16 retry=0;
  50.         u8 status=0;
  51.         RCC_CR|=1<<16;                                //HSE 開啟,開啟外部高速時鐘
  52.         while(((RCC_CR&(1<<17))==0)&&(retry<0X1FFF))retry++;//等待HSE RDY
  53.         if(retry==0X1FFF)status=1;        //HSE無法就緒
  54.         else   
  55.         {
  56.                 RCC_APB1ENR | =1<<28;        //電源接口時鐘使能
  57.                 PWR_CR | =3<<14;                 //高性能模式,時鐘可到168Mhz
  58.                 RCC_CFGR | =(0<<4)|(5<<10)|(4<<13);//HCLK 不分頻;APB1 4分頻,42M;APB2 2分頻.84M
  59.                 RCC_CR & =~(1<<24);        //關閉主PLL
  60.                 RCC_PLLCFGR=pllm|(plln<<6)|(((pllp>>1)-1)<<16)|(pllq<<24)|(1<<22);//配置主PLL,PLL時鐘源來自HSE
  61.                 RCC_CR | =1<<24;                        //打開主PLL
  62.                 while((RCC_CR &(1<<25))==0);//等待PLL準備好
  63.                 FLASH_ACR | =1<<8;                //指令預取使能.
  64.                 FLASH_ACR | =1<<9;                //指令cache使能.
  65.                 FLASH_ACR | =1<<10;                //數據cache使能.
  66.                 FLASH_ACR | =5<<0;                //5個CPU等待周期.
  67.                 RCC_CFGR & =~(3<<0);                //清零
  68.                 RCC_CFGR | =2<<0;                //選擇主PLL作為系統時鐘         
  69.                 while((RCC_CFGR & (3<<2))!=(2<<2));//等待主PLL作為系統時鐘成功.
  70.         }
  71.         return status;
  72. }  

  73. //系統時鐘初始化函數
  74. //plln:主PLL倍頻系數(PLL倍頻),取值范圍:64~432.
  75. //pllm:主PLL和音頻PLL分頻系數(PLL之前的分頻),取值范圍:2~63.
  76. //pllp:系統時鐘的主PLL分頻系數(PLL之后的分頻),取值范圍:2,4,6,8.(僅限這4個值!)
  77. //pllq:USB/SDIO/隨機數產生器等的主PLL分頻系數(PLL之后的分頻),取值范圍:2~15.
  78. void STM32_Glock_Init(u32 plln,u32 pllm,u32 pllp,u32pllq)
  79. {  
  80.         RCC_CR | =0x00000001;                     //設置HISON,開啟內部高速RC振蕩。開啟內部高速時鐘
  81.         RCC_CFGR=0x00000000;                        //CFGR清零
  82.         RCC_CR & =0xFEF6FFFF;                        //HSEON,CSSON,PLLON清零 ,F1110F0110FFFF
  83.         RCC_PLLCFGR=0x24003010;                     //PLLCFGR恢復復位值
  84.         RCC_CR & =~(1<<18);                                //HSEBYP清零,外部晶振不旁路
  85.         RCC_CIR=0x00000000;                     //禁止RCC時鐘中斷 。C:時鐘。I:中斷
  86.         Sys_Clock_Set(plln,pllm,pllp,pllq);//設置時鐘 ,啟動外部時鐘,配置
  87. }
復制代碼

所有資料51hei提供下載:
點亮一顆LED燈.rar (118.58 KB, 下載次數: 36)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:427201 發表于 2018-11-15 17:22 | 只看該作者
新手學習
回復

使用道具 舉報

板凳
ID:427382 發表于 2018-11-15 21:45 來自手機 | 只看該作者
新手學習
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区四区不卡 | 综合久久色 | 日韩一区二区三区在线观看 | 亚洲视频免费在线观看 | 天堂网av在线 | 黄色大片毛片 | 精品久久香蕉国产线看观看亚洲 | 欧美老妇交乱视频 | 国产玖玖 | 国产日日操| 久久最新精品视频 | 成人国内精品久久久久一区 | 亚洲欧美精品在线观看 | 亚洲一区欧美一区 | av天空 | 久久中文视频 | 日本韩国电影免费观看 | 精品国产乱码久久久久久蜜柚 | 欧美精品在线视频 | 欧美视频中文字幕 | 欧美bondage紧缚视频 | 99re66在线观看精品热 | 久久99这里只有精品 | julia中文字幕久久一区二区 | 日韩欧美在线观看视频网站 | 一级欧美视频 | 亚洲专区在线 | 精品久久久久久久久久 | 亚洲区中文字幕 | 二区欧美 | 97久久精品| 国产精品特级毛片一区二区三区 | 日韩成人一区 | 亚洲精品久久久一区二区三区 | 久久精品二区 | 五月婷婷导航 | 精品不卡 | 国产精品视频播放 | 亚洲欧美在线一区 | 国产91精品久久久久久久网曝门 | 91传媒在线观看 |