新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32關于GPIO的問題

STM32關于GPIO的問題

作者: 時間:2016-11-28 來源:網(wǎng)絡 收藏
1、關于GPIO問:STM32的IO口初始化為輸入浮空,那管腳是高電平還是低電平呢?答:既不是高電平也不是低電平,懸空的意思是沒有使用的狀態(tài)。2、有關stm32f103 端口復用的問題?問:在學習GPIO時,遇到到端口復用問題一直不能明白,我舉個例子:PB6 PB7默認情況下是做普通IO使用的,當我想用I2C1是,我開啟RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);當我要使用I2C1的重定義時,我要打開,RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);這樣理解對不對?有的人說當用的芯片

自帶的外設時都要打開 AFIO 時鐘,但我用到usart1時沒有打開AFIO 時鐘,照樣能用usart,這是為什么?總之問這個問題的根本原因是AFIO的時鐘要在什么情況下打開?答:1、串口必須要打開AFIO時鐘,不然不能工作??赡苣愕某跏蓟瘮?shù)、RCC配置中有開啟的地方。 2、AFIO在你需要使用某一模塊時,比如你想使用GPIOC,這個時候要打開GPIOC模塊的時鐘。 3、關閉I2C而不是關閉I2C模塊的總線,如果你想使用普通模式,就要把I2C模塊關閉以后,重新配置GPIOB模塊,就可以正常使用了。3、AFIO重映射的操作步驟是什么?答:使能被重新映射到的I/O端口時鐘使能被重新映射的外設時鐘使能AFIO功能的時鐘 (勿忘!) 進行重映射4、配置IO口的頻率問題問:配置IO口的頻率時,為什么只給一個IO口配置?答:GPIO_InitStructure.GPIO_Speed 這個結構體的成員始終為GPIO_Speed_50MHz 配置其他io口時也默認用50MHz 。5、請問怎樣開始STM32W108CBU64芯片的PB5引腳外設輸入中斷?問:有沒有這么一個例程,有開啟外設中斷和中斷函數(shù)的?最佳答案:看了下datasheet,PB5復用的功能為PB5, ADC0, TIM2CLK, TIM1MSK,相關的中斷應該有,就看你配置為什么外設了。6、STM32F101 Tamper Pin 使用問題問:請教各位大蝦:STM32F101 BKP當中的Tamper Pin該如何初始化???答:當TPAL=0時:如果在啟動侵入檢測TAMPER引腳前(通過設置TPE位)該引腳已經(jīng)為高電平,一旦啟動侵入檢測功能,則會產(chǎn)生一個額外的侵入事件(盡管在TPE位置’1’后并沒有出現(xiàn)上升沿)。 ● 當TPAL=1時:如果在啟動侵入檢測引腳TAMPER前(通過設置TPE位)該引腳已經(jīng)為低電平,一旦啟動侵入檢測功能,則會產(chǎn)生一個額外的侵入事件(盡管在TPE位置’1’后并沒有出現(xiàn)下降沿)。 設置BKP_CSR寄存器的TPIE位為’1’,當檢測到侵入事件時就會產(chǎn)生一個中斷。 詳見:BKP_CSR7、有關stm32f103 端口復用的問題?問:在學習GPIO時,遇到到端口復用問題一直不能明白,我舉個例子:PB6 PB7默認情況下是做普通IO使用的,當我想用I2C1是,我開啟RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);當我要使用I2C1的重定義時,我要打開,RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);這樣理解對不對?有的人說當用的芯片自帶的外設時都要打開 AFIO 時鐘,但我用到usart1時沒有打開AFIO 時鐘,照樣能用usart,這是為什么?總之問這個問題的根本原因是AFIO的時鐘要在什么情況下打開?答:1、串口必須要打開AFIO時鐘,不然不能工作??赡苣愕某跏蓟瘮?shù)、RCC配置中有開啟的地方。 2、AFIO在你需要使用某一模塊時,比如你想使用GPIOC,這個時候要打開GPIOC模塊的時鐘。 3、關閉I2C而不是關閉I2C模塊的總線,如果你想使用普通模式,就要把I2C模塊關閉以后,重新配置GPIOB模塊,就可以正常使用了。7、STM32里面,設置GPIO_Mode_IPU 有什么用問:中斷的配置里面有:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);GPIO口設置里面有: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure);我想問的是,這兩組設置必須同時存在嗎?答:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);STM32中這兩句話的意思是PB口的8、9管腳作為外部中斷的觸發(fā)信號,所以Pin_8和Pin_9就要設置成輸入的模式,而GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;中IPU是指IO口的工作模式是帶上拉輸入,這個和具體的電路

本文引用地址:http://butianyuan.cn/article/201611/322604.htm

有關,總之如果選擇某個IO口作為外部中斷的觸發(fā)信號,就必須配置這個IO口為輸入模式,不然無法觸發(fā)中斷8、stm32中GPIO口的最大輸出速度如何理解?問:stm32中GPIO口的最大輸出速度如何理解?答:1、是這樣的,2M、10M和50M是指GPIO口的采樣頻率。不知這樣理解對不對,我就是這樣做的。 2、我通過PB6采集80KBPS/S的方波,通過中斷計采集,完全勝任。9、STM32 GPIO 弱上拉能做輸入輸出嗎問:STM32 GPIO 弱上拉能做輸入輸出嗎?答:32只有上拉輸入,用在外部連接的是下路輸出的,這樣才能正確讀取。輸出的話一般用推挽和開漏,推挽用于一般的驅(qū)動,開漏一般加上拉電阻三極管集電極那樣驅(qū)動較大電流。10、STM32語句:GPIO->ODR^=0X02 是怎么執(zhí)行的?實現(xiàn)什么功能?問:是GPIO端口的數(shù)據(jù)存在ODR寄存器,該數(shù)據(jù)與0x02異或再存在ODR中嗎?答:ODR是stm32的IO端口輸出數(shù)據(jù)寄存器,該寄存器31-16位始終讀為0,15-0位輸出數(shù)據(jù)。GPIO->ODR^=0X02 是輸出數(shù)據(jù)與0x02異或,即輸出數(shù)據(jù)的第二位如果與1相同,該位置0,反之出1,因此實現(xiàn)取反,輸出數(shù)據(jù)保存在ODR,每執(zhí)行一次輸出數(shù)據(jù)的第二位取反一次。10、GPIO配置速度問:stm32中的GPIO如果設置成了輸入模式,還需要配置GPIO_Speed么?答:輸入模式可以不用配置速度,但是輸出模式必須確定最大輸出頻率。11、stm32 GPIO輸入電平檢測問:GPIO兩個引腳,模式都初始化為輸入弱上拉,給其中一個引腳接4.7V的電壓,IDR對應的值為1;給另一個引腳接5.13V的電壓,IDR對應的值卻為0;答:檢查一下是否使能了相應GPIO的時鐘,是否有這樣一句RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);有它就使能了,否則讀出的值不可預測。12、關于STM32中GPIO寄存器IDR和ODR數(shù)據(jù)問:STM32中GPIO寄存器IDR和ODR數(shù)據(jù)是不是同步的?為什么我用GPIO_SetBits函數(shù)設置管腳的時候,IDR和ODR同時改變,怎么使得只改變ODR的數(shù)據(jù),而不改變IDR的數(shù)據(jù)?謝謝!答:IDR寄存器的數(shù)據(jù)時實時反映IO口的狀態(tài),當然設置ODR,IO的狀態(tài)也跟著改變,除非強制人為地設置。比如,ODR設置為1,而強制將對應的IO口接地,這時IDR就和ODR不一致;或者將ODR設置0,而強制降對應IO口接VCC,這時也不一致。13、用STM32,有六個GPIO口(不在同一組)要相同信號輸出,請問怎么設置?問:例如GPIOE的pin10重映射到TIM1,設置好TIM1的PWM信號輸出;其他的IO口如GPIOA的pin5、GPIOA的pin6、GPIOB的pin5、GPIOB的pin6、GPIOC的pin5也要輸出與GPIOE的pin10相同的信號,請問大俠怎么設置?答:用定時器中斷吧,把PWM的脈寬配置成定時中斷,把GPIO引腳都配置好,相應時鐘都使能,然后到定時器中斷函數(shù)中做相同的處理。14、關于GPIO_WriteBit與GPIO_SetBits問:GPIO_WriteBit與GPIO_SetBits有什么區(qū)別答:可以用man命令查看區(qū)別man ioctl :NAME ioctl - control deviceman write :NAME write - write to a file descriptor15、關于GPIO_InitTypeDef GPIO_InitStructure問:這句話什么意思?答:聲明一個結構體,名字是GPIO_InitStructure,結構體原型由GPIO_InitTypeDef 確定,stm32里面初始化GPIO用的吧。。設置完了GPIO_InitStructure里面的內(nèi)容后在GPIO_Init (GPIO_TypeDef 。*GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面調(diào)用,比如初始化pa口,就是GPIO_Init (GPIOA, &GPIO_InitStructure),括號里后面那個就是你問題里面聲明的那個結構體。16、關于 STM32的IO口能不能像51的IO口那樣直接控制Px口輸出問:大家好,STM32的IO口能不能像51的IO口那樣直接控制Px口輸出?比如我要用51控制器段數(shù)碼管,只要給Px口送十六進制數(shù)值就可以了?請問STM32可以嗎?答:可以的,舉2個例子:GPIO0->BRR = 0x55;GPIO1->BSRR = 0x55;這其中的GPIOx表示IO號的號碼,BRR/BSRR表示相就IO口的控制寄存器,就按這個格式操作就行了。17、關于stm32芯片IO端口配置問:stm32芯片 IO端口配置為浮空輸入時,能不能讀取端口上的電平狀態(tài)。答:STM32的輸入狀態(tài)寄存器GPIOx_IDR和輸出狀態(tài)寄存器和GPIOx_ODR的讀取是不受端口配置影響的。18、stm32 JTAG和普通IO復用問題問:stm32 JTAG和普通IO復用,當軟件設置為普通IO時,還能用JTAG下載軟件嗎。答:能。因為在下載的時候,通過RESET時序進入了下載模式了。但是注意硬件的接法不要強制拉高拉低,也不要讓其芯片的輸出腳接過來。這樣就會影響到jtag了。



關鍵詞: STM32GPI

評論


技術專區(qū)

關閉