日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

STM32F1笔记(一)GPIO输出

發(fā)布時(shí)間:2023/12/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F1笔记(一)GPIO输出 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GPIO:General Purpose Input Output (通用輸入/輸出)。

?

GPIO最經(jīng)典應(yīng)用:LED燈。

先看電路。聲明:參考正點(diǎn)原子戰(zhàn)艦開發(fā)板。

與LED串聯(lián)的電阻稱為限流電阻。

限流電阻計(jì)算公式:R=(U-LED壓降)/20ma。

U為L(zhǎng)ED工作電壓,LED一般最大電流為20ma。

在此R=(3.3-0.7)/0.02=130Ω。

因此本次示例中限流電阻阻值大于130Ω,才不會(huì)燒壞LED。

?

再看代碼。

GPIO初始化。

void LED_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_SetBits(GPIOB, GPIO_Pin_5);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_Init(GPIOE, &GPIO_InitStructure);GPIO_SetBits(GPIOE, GPIO_Pin_5); }

LED應(yīng)用

void HW_Led0_Off(void) {GPIO_SetBits(GPIOB, GPIO_Pin_5); //設(shè)置GPIO輸出1 }void HW_Led0_on(void) {GPIO_ResetBits(GPIOB, GPIO_Pin_5); //設(shè)置GPIO輸出0 }void HW_Led1_Off(void) {GPIO_SetBits(GPIOE, GPIO_Pin_5); //設(shè)置GPIO輸出1 }void HW_Led1_on(void) {GPIO_ResetBits(GPIOE, GPIO_Pin_5); //設(shè)置GPIO輸出0 }

思考:為什么IO輸出低電平時(shí)LED亮,而不是輸出高電平?

思路:

? ? 1、由于單片機(jī)的I/O口的結(jié)構(gòu)決定了它灌電流能力較強(qiáng),而拉電流能力比較弱(即IO口的低平驅(qū)動(dòng)能力較強(qiáng)而高電平驅(qū)動(dòng)能力較差);

? ? 2、為了簡(jiǎn)化單片機(jī)接口的設(shè)計(jì)。高電平驅(qū)動(dòng)和低電平驅(qū)動(dòng)是同樣的效果,另外,低電平驅(qū)動(dòng)也簡(jiǎn)化了控制代碼,避免了單片機(jī)上電復(fù)位時(shí)端口置高電平后對(duì)led的影響;

?

從STM32中文參考手冊(cè)內(nèi)得知,STM32的GPIO可配置為八種模式。

? ? 1、浮空輸入(Input floating)

? ? 2、上拉輸入(Input pull-up)

? ? 3、下拉輸入(Input pull-down)

? ? 4、模擬輸入(Analog)

? ? 5、開漏輸出(Output open-drain)

? ? 6、推挽式輸出(Output push-pull)

? ? 7、推挽式復(fù)用功能(Alternate function push-pull)

? ? 8、開漏復(fù)用功能(Alternate function open-drain)

typedef enum { GPIO_Mode_AIN = 0x0,GPIO_Mode_IN_FLOATING = 0x04,GPIO_Mode_IPD = 0x28,GPIO_Mode_IPU = 0x48,GPIO_Mode_Out_OD = 0x14,GPIO_Mode_Out_PP = 0x10,GPIO_Mode_AF_OD = 0x1C,GPIO_Mode_AF_PP = 0x18 }GPIOMode_TypeDef;

驅(qū)動(dòng)LED使用的是推挽輸出。推挽電路(push-pull)就是兩個(gè)不同極性晶體管間連接的輸出電路。

簡(jiǎn)單理解推挽和開漏的區(qū)別:驅(qū)動(dòng)能力不同。推挽驅(qū)動(dòng)能力強(qiáng)。

復(fù)用意思是GPIO不作為普通IO,而是特殊功能使用,比如ADC、USART等。

更深層次的研究可參考鏈接博客:https://blog.csdn.net/techexchangeischeap/article/details/72569999

?

引腳輸出速度有3種:

typedef enum { GPIO_Speed_10MHz = 1,GPIO_Speed_2MHz, GPIO_Speed_50MHz }GPIOSpeed_TypeDef;

GPIO的速度應(yīng)該與應(yīng)用匹配。速度配置越高,噪聲越大,功耗越大。

比如配置為串口應(yīng)用,波特率為115200,此時(shí)GPIO的速度配置為2MHz就夠了,既省電也噪聲小。

I2C接口,400K波特率,若想把余量留大些,可以配置為10MHz。

SPI接口,18M或9M需要選用50MHz的GPIO速度。

?

輸入模式的講解在下一篇筆記。

特殊應(yīng)用重映射I/O在后續(xù)如有項(xiàng)目需要再添加入筆記。

總結(jié)

以上是生活随笔為你收集整理的STM32F1笔记(一)GPIO输出的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。