2010年3月27日 星期六

stm32 入門篇-I/O設定

這顆stm32的i/o設定上,功能就很多了


輸入可以分成


1、input pull-up  上拉(提升)電阻輸入


2、input pull-down 下拉電阻輸入


3、input floating 空接輸入


4、analog input 類比輸入


5、alternate function input 選擇式輸入


輸出可以分成


1、output open-drain 開汲極輸出


2、output push-pull  推挽式輸出


3、alternate function open-drain 選擇式開汲極輸出


4、alternate function push-pull 選擇式推挽式輸出


alternate function一開始我還搞不太懂,原來其實就只是,初始化的時後stm32原本的腳位設定都是I/O,如果需要選用到TIMER、USART這類的周邊輸出輸入,就需要選擇alternate function,這樣的話,I/O就會被選擇到相對應的功能。


另外腳位的預設還可以REMAP(重新設定),這時後也是需要選擇alternate function,這滿需要注意的



I/O的速度大概可以分成三種:2Mhz、10Mhz、50Mhz,本來一直以為I/O要跑到50Mhz要做什麼,後來發現,USB需要48Mhz,而MCO(main clock output)都可能跑到這個速度,所以就慢慢的能體會了。


因為I/O是由APB在控制的,所以選擇速度主要是和AMBA bus有關系。


 


假設我要做PRC0與PRC1做閃爍燈


程式主要的設定


I/O的設定


  GPIO_InitTypeDef GPIO_InitStructure;


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; //pin0 與pin1
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽式輸出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //選擇50Mhz的輸出
  GPIO_Init(GPIOC, &GPIO_InitStructure); //將設定選擇到GPIOC上


用這指令前要先宣告結構變數,還好有玩過typedef,賺到了


RCC(reset and clock controller )的設定


 RCC_APB2PeriphClockCmd(RCC_APB2Periph_C, ENABLE); //置能GPIOC


主程式就利用一個死迴圈和1個delay達成閃爍燈的功能


main{


  while(1){


         GPIOC->ODR &= 0xfffffffc    ;
         Delay( ) ;
         GPIOC->ODR |= 0x00000003    ;
         Delay( ) ;
  }


}


-> 這個指標結構又跑出來了,還好之前有玩過,不然又要錯怪它是c++了


這只是最簡單的設定而已,但其實有了dsPIC的底子,其實學stm32並不會太難


但因為我使用的介面是keil C,所以對環境到是不太習慣


沒有留言:

張貼留言