STM32關(guān)于GPIO的問題
自帶的外設(shè)時(shí)都要打開 AFIO 時(shí)鐘,但我用到usart1時(shí)沒有打開AFIO 時(shí)鐘,照樣能用usart,這是為什么?總之問這個(gè)問題的根本原因是AFIO的時(shí)鐘要在什么情況下打開?答:1、串口必須要打開AFIO時(shí)鐘,不然不能工作??赡苣愕某跏蓟瘮?shù)、RCC配置中有開啟的地方。 2、AFIO在你需要使用某一模塊時(shí),比如你想使用GPIOC,這個(gè)時(shí)候要打開GPIOC模塊的時(shí)鐘。 3、關(guān)閉I2C而不是關(guān)閉I2C模塊的總線,如果你想使用普通模式,就要把I2C模塊關(guān)閉以后,重新配置GPIOB模塊,就可以正常使用了。3、AFIO重映射的操作步驟是什么?答:使能被重新映射到的I/O端口時(shí)鐘使能被重新映射的外設(shè)時(shí)鐘使能AFIO功能的時(shí)鐘 (勿忘!) 進(jìn)行重映射4、配置IO口的頻率問題問:配置IO口的頻率時(shí),為什么只給一個(gè)IO口配置?答:GPIO_InitStructure.GPIO_Speed 這個(gè)結(jié)構(gòu)體的成員始終為GPIO_Speed_50MHz 配置其他io口時(shí)也默認(rèn)用50MHz 。5、請問怎樣開始STM32W108CBU64芯片的PB5引腳外設(shè)輸入中斷?問:有沒有這么一個(gè)例程,有開啟外設(shè)中斷和中斷函數(shù)的?最佳答案:看了下datasheet,PB5復(fù)用的功能為PB5, ADC0, TIM2CLK, TIM1MSK,相關(guān)的中斷應(yīng)該有,就看你配置為什么外設(shè)了。6、STM32F101 Tamper Pin 使用問題問:請教各位大蝦:STM32F101 BKP當(dāng)中的Tamper Pin該如何初始化???答:當(dāng)TPAL=0時(shí):如果在啟動侵入檢測TAMPER引腳前(通過設(shè)置TPE位)該引腳已經(jīng)為高電平,一旦啟動侵入檢測功能,則會產(chǎn)生一個(gè)額外的侵入事件(盡管在TPE位置’1’后并沒有出現(xiàn)上升沿)。 ● 當(dāng)TPAL=1時(shí):如果在啟動侵入檢測引腳TAMPER前(通過設(shè)置TPE位)該引腳已經(jīng)為低電平,一旦啟動侵入檢測功能,則會產(chǎn)生一個(gè)額外的侵入事件(盡管在TPE位置’1’后并沒有出現(xiàn)下降沿)。 設(shè)置BKP_CSR寄存器的TPIE位為’1’,當(dāng)檢測到侵入事件時(shí)就會產(chǎn)生一個(gè)中斷。 詳見:BKP_CSR7、有關(guān)stm32f103 端口復(fù)用的問題?問:在學(xué)習(xí)GPIO時(shí),遇到到端口復(fù)用問題一直不能明白,我舉個(gè)例子:PB6 PB7默認(rèn)情況下是做普通IO使用的,當(dāng)我想用I2C1是,我開啟RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);當(dāng)我要使用I2C1的重定義時(shí),我要打開,RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);這樣理解對不對?有的人說當(dāng)用的芯片自帶的外設(shè)時(shí)都要打開 AFIO 時(shí)鐘,但我用到usart1時(shí)沒有打開AFIO 時(shí)鐘,照樣能用usart,這是為什么?總之問這個(gè)問題的根本原因是AFIO的時(shí)鐘要在什么情況下打開?答:1、串口必須要打開AFIO時(shí)鐘,不然不能工作??赡苣愕某跏蓟瘮?shù)、RCC配置中有開啟的地方。 2、AFIO在你需要使用某一模塊時(shí),比如你想使用GPIOC,這個(gè)時(shí)候要打開GPIOC模塊的時(shí)鐘。 3、關(guān)閉I2C而不是關(guān)閉I2C模塊的總線,如果你想使用普通模式,就要把I2C模塊關(guān)閉以后,重新配置GPIOB模塊,就可以正常使用了。7、STM32里面,設(shè)置GPIO_Mode_IPU 有什么用問:中斷的配置里面有:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);GPIO口設(shè)置里面有: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure);我想問的是,這兩組設(shè)置必須同時(shí)存在嗎?答:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);STM32中這兩句話的意思是PB口的8、9管腳作為外部中斷的觸發(fā)信號,所以Pin_8和Pin_9就要設(shè)置成輸入的模式,而GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;中IPU是指IO口的工作模式是帶上拉輸入,這個(gè)和具體的電路
本文引用地址:http://m.butianyuan.cn/article/201611/322604.htm有關(guān),總之如果選擇某個(gè)IO口作為外部中斷的觸發(fā)信號,就必須配置這個(gè)IO口為輸入模式,不然無法觸發(fā)中斷8、stm32中GPIO口的最大輸出速度如何理解?問:stm32中GPIO口的最大輸出速度如何理解?答:1、是這樣的,2M、10M和50M是指GPIO口的采樣頻率。不知這樣理解對不對,我就是這樣做的。 2、我通過PB6采集80KBPS/S的方波,通過中斷計(jì)采集,完全勝任。9、STM32 GPIO 弱上拉能做輸入輸出嗎問:STM32 GPIO 弱上拉能做輸入輸出嗎?答:32只有上拉輸入,用在外部連接的是下路輸出的,這樣才能正確讀取。輸出的話一般用推挽和開漏,推挽用于一般的驅(qū)動,開漏一般加上拉電阻像三極管集電極那樣驅(qū)動較大電流。10、STM32語句:GPIO->ODR^=0X02 是怎么執(zhí)行的?實(shí)現(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,因此實(shí)現(xiàn)取反,輸出數(shù)據(jù)保存在ODR,每執(zhí)行一次輸出數(shù)據(jù)的第二位取反一次。10、GPIO配置速度問:stm32中的GPIO如果設(shè)置成了輸入模式,還需要配置GPIO_Speed么?答:輸入模式可以不用配置速度,但是輸出模式必須確定最大輸出頻率。11、stm32 GPIO輸入電平檢測問:GPIO兩個(gè)引腳,模式都初始化為輸入弱上拉,給其中一個(gè)引腳接4.7V的電壓,IDR對應(yīng)的值為1;給另一個(gè)引腳接5.13V的電壓,IDR對應(yīng)的值卻為0;答:檢查一下是否使能了相應(yīng)GPIO的時(shí)鐘,是否有這樣一句RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx,ENABLE);有它就使能了,否則讀出的值不可預(yù)測。12、關(guān)于STM32中GPIO寄存器IDR和ODR數(shù)據(jù)問:STM32中GPIO寄存器IDR和ODR數(shù)據(jù)是不是同步的?為什么我用GPIO_SetBits函數(shù)設(shè)置管腳的時(shí)候,IDR和ODR同時(shí)改變,怎么使得只改變ODR的數(shù)據(jù),而不改變IDR的數(shù)據(jù)?謝謝!答:IDR寄存器的數(shù)據(jù)時(shí)實(shí)時(shí)反映IO口的狀態(tài),當(dāng)然設(shè)置ODR,IO的狀態(tài)也跟著改變,除非強(qiáng)制人為地設(shè)置。比如,ODR設(shè)置為1,而強(qiáng)制將對應(yīng)的IO口接地,這時(shí)IDR就和ODR不一致;或者將ODR設(shè)置0,而強(qiáng)制降對應(yīng)IO口接VCC,這時(shí)也不一致。13、用STM32,有六個(gè)GPIO口(不在同一組)要相同信號輸出,請問怎么設(shè)置?問:例如GPIOE的pin10重映射到TIM1,設(shè)置好TIM1的PWM信號輸出;其他的IO口如GPIOA的pin5、GPIOA的pin6、GPIOB的pin5、GPIOB的pin6、GPIOC的pin5也要輸出與GPIOE的pin10相同的信號,請問大俠怎么設(shè)置?答:用定時(shí)器中斷吧,把PWM的脈寬配置成定時(shí)中斷,把GPIO引腳都配置好,相應(yīng)時(shí)鐘都使能,然后到定時(shí)器中斷函數(shù)中做相同的處理。14、關(guān)于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、關(guān)于GPIO_InitTypeDef GPIO_InitStructure問:這句話什么意思?答:聲明一個(gè)結(jié)構(gòu)體,名字是GPIO_InitStructure,結(jié)構(gòu)體原型由GPIO_InitTypeDef 確定,stm32里面初始化GPIO用的吧。。設(shè)置完了GPIO_InitStructure里面的內(nèi)容后在GPIO_Init (GPIO_TypeDef 。*GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面調(diào)用,比如初始化pa口,就是GPIO_Init (GPIOA, &GPIO_InitStructure),括號里后面那個(gè)就是你問題里面聲明的那個(gè)結(jié)構(gòu)體。16、關(guān)于 STM32的IO口能不能像51的IO口那樣直接控制Px口輸出問:大家好,STM32的IO口能不能像51的IO口那樣直接控制Px口輸出?比如我要用51控制器段數(shù)碼管,只要給Px口送十六進(jìn)制數(shù)值就可以了?請問STM32可以嗎?答:可以的,舉2個(gè)例子:GPIO0->BRR = 0x55;GPIO1->BSRR = 0x55;這其中的GPIOx表示IO號的號碼,BRR/BSRR表示相就IO口的控制寄存器,就按這個(gè)格式操作就行了。17、關(guān)于stm32芯片IO端口配置問:stm32芯片 IO端口配置為浮空輸入時(shí),能不能讀取端口上的電平狀態(tài)。答:STM32的輸入狀態(tài)寄存器GPIOx_IDR和輸出狀態(tài)寄存器和GPIOx_ODR的讀取是不受端口配置影響的。18、stm32 JTAG和普通IO復(fù)用問題問:stm32 JTAG和普通IO復(fù)用,當(dāng)軟件設(shè)置為普通IO時(shí),還能用JTAG下載軟件嗎。答:能。因?yàn)樵谙螺d的時(shí)候,通過RESET時(shí)序進(jìn)入了下載模式了。但是注意硬件的接法不要強(qiáng)制拉高拉低,也不要讓其芯片的輸出腳接過來。這樣就會影響到j(luò)tag了。
評論