1、軟件環境:Keil uv5.15
2、硬件環境:STM32F103C8T6 最小系統
在一個項目中需要用到STM32 的PA6引腳,發現工作異常。由于是自己做的最小系統,所以檢查了芯片引腳,并沒有發現虛焊、或者跟其他引腳連在一起的情況,初步判斷是單片機或者程序的問題,硬件電路應該沒有問題,硬件電路如下所示。
手工做的板子,電路還在調試,還沒來得及清潔,所以有點臟。拿出示波器觀察波形輸出
從示波器可以看出,PA6引腳輸出低電平無法到0v,而是2.1v左右。查看引腳初始化代碼如下
void gpioInit()
{
GPIO_InitTypeDef g;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
g.GPIO_Pin = GPIO_Pin_6;
g.GPIO_Speed = GPIO_Speed_50MHz;
g.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_Init(GPIOA, &g);
}
main函數如下
void main()
{
(省略一些初始化工作)
while(1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_6);
delay_ms(200);
GPIO_ResetBits(GPIOA, GPIO_Pin_6);
delay_ms(200);
}
}
整個過程沒有發現什么異常的地方,突然想到之前有個demo是正常的,經排查,發現初始化代碼寫成如下的形式(即將GPIO_Pin_6改為GPIO_Pin_All)就能夠正常輸出
void gpioInit()
{
GPIO_InitTypeDef g;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
g.GPIO_Pin = GPIO_Pin_All;
g.GPIO_Speed = GPIO_Speed_50MHz;
g.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_Init(GPIOA, &g);
}
輸出波形如下:
很納悶,為什么將GPIOA引腳初始化為GPIO_Pin_6工作異常,而初始化為GPIO_Pin_All就正常呢?繼續排查,發現問題竟然是出現在SPI初始化函數中!將標紅的語句注釋掉即可
SPI_InitStructure.SPI_CPOL =SPI_CPOL_High ; //始終懸空高 // SPI_CPOL_Low//始終懸空低
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//第2個時鐘沿捕獲 //SPI_CPHA_1Edge第1個時鐘沿捕獲
// SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //硬件控制NSS信號(ss) 置成軟件時,NSS腳可以他用
查看數據手冊可以發現PA6引腳跟SPI通信相關,可能是操作PA6引腳的時候跟SPI沖突所致,正好項目中沒有用到SPI通信,所以將SPI初始化屏蔽掉即可,具體原因有空再去了解吧~~~~。
上一篇: stm32串口通信調試總結
下一篇:STM32的8種GPIO輸入輸出模式深入詳解
推薦閱讀
史海拾趣
本人想在開始菜單中添加關機/重啟兩個菜單項:開發工具VS2005英文版。系統已經定制為中文。 查找并修改了:PUBLIC\\SHELL\\OAK\\LIB\\ARMV4I\\RETAIL\\0804\\explorerbase.res explorerbase.res 文件直接用VS2005打開,選中行“網絡和撥號連接( ...… 查看全部問答∨ |
|
很簡單的電路就是把X5043的4個SPI口連到ARM的SPI(用的是STM32),X5043是3.3V供電,復位閾值2.7V 上電后,什么都不做,x5043的Reset腳一直是低,這就已經不太對了吧? SI已經有波形了,但SO就是沒有變化,懷疑芯片壞了,但也換過2次了, 有沒有 ...… 查看全部問答∨ |
小弟想做一個基于ARM嵌入式系統的RPC遠程函數調用模塊,用RPCGEN生成的模板寫了一個小的測試程序,但是不知道該如何移植到開發板上運行。 內核是2.4.x的,已經添加了RPC服務,但是在移植的系統下找不到portmap端口映射器,找了很多地方都沒有相關 ...… 查看全部問答∨ |
感覺最好用“JTAG + bin文件”的方案,但是在IAR上看了下好像不行…… 至于串口ISP方案,比較麻煩……因為我們的產品燒完程序后還需要用串口來做一系列初始化… 查看全部問答∨ |
本帖最后由 dontium 于 2015-1-23 13:34 編輯 我用的是28系列芯片,CAN通訊,發送數據很多,COB-ID也不一樣,只用一個發送郵箱完成不同數據的發送,每次發送數據前,先要重新配置此郵箱的COB-ID、數據長度等,不知道這樣做有沒有問題? 現在我遇 ...… 查看全部問答∨ |
下面的圖是我寫的一個程序的仿真結果,本來程序中式希望在clk的上升沿將y1的值賦值給y_out,結果卻出現了圖中所示的情況,很奇怪,y_out不僅不是在時鐘的上升沿被賦值,而且中間還出現了很多多余的變量~~~~~~不知道有沒有同仁遇到過,幫忙答疑解惑~… 查看全部問答∨ |
|
盧有亮老師的《嵌入式實時操作系統μC/OS原理與實踐》2012.2電子工業出版社出版優點有1.比較適合入門,對代碼的講解詳細充分, 采用逐層深入,反復認證的方法,通過從數據結構到函數代碼再到例程的方法比較容易學懂。作者根據教學和項目開發,自己整 ...… 查看全部問答∨ |