<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          stm32學習之三

          作者: 時間:2016-12-03 來源:網(wǎng)絡 收藏
          1、GPIOLED燈的點亮程序:

          GPIO的功能是多樣的,驅動LED燈,獲得按鍵的輸入信息……。

          本文引用地址:http://www.ex-cimer.com/article/201612/325173.htm

          對于驅動LED燈,按照上面就需要對GPIO進行配置。

          基本知識掌握:

          2013年4月24日:
          下午:
          stm32學習的原因:
          1、從內核上:一般人開始學習的時候,都是從arm7開始的,但是自從stm32開發(fā)板出現(xiàn)后,就發(fā)現(xiàn)了人們更多的在
          使用了stm32了。
          2、從用途上:stm32微控制器工業(yè)控制上、消費電子、手持設備、汽車電子、安防監(jiān)控等眾多領域得到廣泛的
          應用,而且其高性價比,適合手工DIY的優(yōu)點。

          arm7與stm32的比較:
          Cortext-32的速度比arm7塊三分之一,功耗低四分之一,并且能夠實現(xiàn)更小芯片面積,利于將更多功能整合在更小的
          芯片尺寸中。cortex-m3處理器結合了執(zhí)行Thumb-2指令的32為哈佛微體系結構和系統(tǒng)外設,包括Nested Vec-tored interrupt
          Controller和Arbiter總線。、
          在工控領域,用戶要求具有更快的中斷速度,cortex-m3采用了Tail-Chaining中斷技術,完全基于硬件進行中斷處理,
          最多可減少12個時鐘周期數(shù),在實際應用中可減少百分之七十的中斷數(shù)目。

          了解AVR:
          AVR可以說是一款很成功的一款芯片,功耗低,性能強。較之前的51,性能提高了好幾個檔次。AVR的外設很豐富,一般的
          項目都能滿足。
          但是自從STM32出現(xiàn)之后,AVR就"退出江湖了"。
          因為它跟stm32是沒法比的。

          3、使用方便:
          1、支持串口下載
          2、所有的IO端口都可以產生中斷
          3、技術資料多
          4、支持SWD下載
          5、復用IO口重映射功能

          注意:
          編譯軟件:
          1、MDK還是IAR?
          一般的都是使用的MDK
          2、固件庫還是寄存器?
          一般的都要用,都要學。

          IAR占的編譯代碼速度,占的flash等等都是比MDK好,但是都不是很大。
          但是一般都不用IAR
          但是:
          keil(被ARM收購了):
          1、界面友好
          2、配置簡單
          3、操作簡單

          stm32最小系統(tǒng)(能使單片機工作的系統(tǒng)):
          1、電源
          2、復位
          3、時鐘
          4、下載電路(很多人都認為這個不屬于最小系統(tǒng),但是完整的還是加上的)

          主要是注意一個是時鐘。
          注意時鐘的分配,來源,幾路走出等。


          1、系統(tǒng)時鐘的初始化函數(shù)。
          2、延時函數(shù)的實現(xiàn)。
          軟件延時是比較簡單的方法,它利用CPU執(zhí)行一循環(huán)語句來產生延時的效果。
          對于stm32來說,執(zhí)行一條指令只有幾十個ns,進行for循環(huán),要實現(xiàn)N毫秒的x值非常大,而且由于系統(tǒng)的頻率的
          寬廣,很難計算出延時N毫秒的精確值。
          軟件延時不占用定時器資源,但占用CPU資源,它的延時精度不高,適合應用在對延時精度不高的場合。

          十分要注意的是:

          GPIO的配置,很重要的一方面就是時鐘的給予,沒有時鐘,就算一切都配置好了,也是徒勞的。

          程序:

          LED的頭文件的相關信息:

          #ifndef _LED_H
          #define _LED_H
          #include "stm32f10x.h"

          #define ON 1
          #define OFF 0

          #define LED1(a) if (a)
          GPIO_ResetBits(GPIOC,GPIO_Pin_3);
          else
          GPIO_SetBits(GPIOC,GPIO_Pin_3)
          #define LED2(a) if (a)
          GPIO_ResetBits(GPIOC,GPIO_Pin_4);
          else
          GPIO_SetBits(GPIOC,GPIO_Pin_4)
          #define LED3(a) if (a)
          GPIO_ResetBits(GPIOC,GPIO_Pin_5);
          else
          GPIO_SetBits(GPIOC,GPIO_Pin_5)
          void LED_GPIO_Config(void);


          #endif
          這里有一個很重要的define,對于這次的程序來說,是非常小的,用到的不多的話,一般不用這樣定義的。但同時也要看到這個程序的定義

          的技巧性。

          然后寫上led.c的相關GPIO配置信息,

          #include "led.h"
          void LED_GPIO_Config(void)
          {
          GPIO_InitTypeDef GPIO_InitStructure;
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

          GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
          GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
          GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

          GPIO_Init(GPIOC,&GPIO_InitStructure);

          GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
          }
          再個就是主程序的調用問題:

          /******************** (C) COPYRIGHT 2013**************************
          * 文件名 :main.c
          * 描述 :用3.5.0版本建的工程模板。
          * 實驗平臺:野火STM32開發(fā)板應該是STM32F103VET6
          * 庫版本 :ST3.5.0
          *
          * 作者 :wit_yuan
          * 版本 : v1.0
          * 時間 : 2013年4月27日
          **********************************************************************************/
          #include "stm32f10x.h"
          #include "led.h"
          void delay(__IO uint32_t time);
          /*
          * 函數(shù)名:main
          * 描述 : 主函數(shù)
          * 輸入 :無
          * 輸出 : 無
          */
          int main(void)
          {
          LED_GPIO_Config();
          LED1(ON);
          delay(0x0FFFFFFF);
          LED1(OFF);
          }
          void delay(__IO uint32_t time)
          {
          for(;time>0;time--);
          }

          需要注意的是,時鐘給予的是72MHZ,那么這個程序延時的話,應該是30多秒。結果證明也是差不多時間。


          注意:

          由于用到了時鐘的相關配置,因此需要加上頭文件的。

          #include "stm32f10x_rcc.h"



          關鍵詞: stm32GPI

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();