<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32入門(mén)筆記(3)——GPIO

STM32入門(mén)筆記(3)——GPIO

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò ) 收藏
STM32的每個(gè)I/O口都由7個(gè)寄存器控制:2個(gè)32位端口配置寄存器CRL和CRH;2個(gè)32位的數據寄存器IDR和ODR;1個(gè)32位的置位復位寄存器BSRR;1個(gè)16位的復位寄存器BRR;1個(gè)32位的鎖存寄存器LCKR;最常用的有4個(gè):CRL/CRH/IDR/ODR;因此通常情況下只需要配置好以上四個(gè)寄存器就可以了。而CRH和CRL作用是完全一樣的,只不過(guò)CRH控制的是高8位的IO而CRL控制的是低8位的,因此IO的控制就顯的比較簡(jiǎn)單了。

(1)使能IO時(shí)鐘

本文引用地址:http://dyxdggzs.com/article/201611/320428.htm

老規矩,用到哪個(gè)IO使能哪組IO時(shí)鐘。例:RCC->APB2ENR|=1<<2; // 使能PORTA時(shí)鐘

(2)配置IO輸入/輸出模式

STM32的輸入輸出管腳有下面8種可能的配置:(4輸入+2輸出+2復用輸出)。例:設置PORTC的11位為上拉輸入,12位為推挽輸出

GPIOC->CRH&=0XFFF00FFF; // 清除這2位原來(lái)設置

GPIOC->CRH|=0X00038000; // PC11輸入,PC12輸出

GPIOC->ODR|=1<<11; // PC11上拉

(3)IO作為輸入時(shí)判斷IO高低電平

例:判斷PORTC的11位是否為低

if((GPIOC->IDR&1<<11)==0)

//用戶(hù)代碼;

小結:

上電后IO默認為浮空輸入狀態(tài);當輸出速率為50M時(shí),八種I/O模式CRH/CRL配置為:通用推挽輸出:0x3;通用開(kāi)漏輸出:0x7;復用推挽輸出:0xb;復用開(kāi)漏輸出:0xf;模擬輸入:0x0;浮空輸入:0x4(上電默認);下/上拉輸入:0x8;

I/O口的輸出模式下,有3種輸出速度可選(2MHz、10MHz和50MHz),這個(gè)速度是指I/O口驅動(dòng)電路的響應速度而不是輸出信號的速度,輸出信號的速度與程序有關(guān)(芯片內部在I/O口的輸出部分安排了多個(gè)響應速度不同的輸出驅動(dòng)電路,用戶(hù)可以根據自己的需要選擇合適的驅動(dòng)電路)。通過(guò)選擇速度來(lái)選擇不同的輸出驅動(dòng)模塊,達到最佳的噪聲控制和降低功耗的目的。高頻的驅動(dòng)電路,噪聲也高,當不需要高的輸出頻率時(shí),請選用低頻驅動(dòng)電路,這樣非常有利于提高系統的EMI性能。當然如果要輸出較高頻率的信號,但卻選用了較低頻率的驅動(dòng)模塊,很可能會(huì )得到失真的輸出信號。關(guān)鍵是GPIO的引腳速度跟應用匹配(推薦10倍以上?)。

比如:

對于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引腳速度就夠了,既省電也噪聲小。

對于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引腳速度或許不夠,這時(shí)可以選用10M的GPIO引腳速度。

對于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引腳速度顯然不夠了,需要選用50M的GPIO的引腳速度。

點(diǎn)亮LED例程:(正點(diǎn)原子開(kāi)發(fā)板)

[cpp]view plaincopy
  1. //點(diǎn)亮第一個(gè)LED燈,不用位映射
  2. #include"sys.h"
  3. #include"delay.h"
  4. intmain(void)
  5. {
  6. Stm32_Clock_Init(9);//初始化系統時(shí)鐘
  7. delay_init(72);//延時(shí)初使化
  8. RCC->APB2ENR|=1<<2;//使能PORTA時(shí)鐘
  9. GPIOA->CRH&=0XFFFFFFF0;//清PA8
  10. GPIOA->CRH|=0X03;//設置PA8為推挽輸出
  11. GPIOA->ODR&=0<<8;//初始化PA8輸出0
  12. while(1)
  13. {
  14. GPIOA->ODR|=1<<8;//設置PA8輸出1,led
  15. delay_ms(1000);//延時(shí)1s
  16. GPIOA->ODR&=0<<8;//設置PA8輸出0,led亮
  17. delay_ms(1000);//延時(shí)1s
  18. }
  19. }//位映射法點(diǎn)亮LED,不過(guò)于糾結位映射的具體實(shí)現
  20. #include"sys.h"
  21. #include"delay.h"
  22. intmain(void)
  23. {
  24. Stm32_Clock_Init(9);//初始化系統時(shí)鐘
  25. delay_init(72);//延時(shí)初使化
  26. RCC->APB2ENR|=1<<2;//使能PORTA時(shí)鐘
  27. GPIOA->CRH&=0XFFFFFFF0;//清PA8
  28. GPIOA->CRH|=0X03;//設置PA8為推挽輸出
  29. PAout(8)=1;
  30. while(1)
  31. {
  32. PAout(8)=0;
  33. delay_ms(1000);//延時(shí)1s
  34. PAout(8)=1;//設置PA8輸出0,led亮
  35. delay_ms(1000);//延時(shí)1s
  36. }



關(guān)鍵詞: STM32入門(mén)筆記GPI

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>