這顆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,所以對環境到是不太習慣
沒有留言:
張貼留言