硬件平臺:
stm32f407+ft232RL
按照手冊上的電路,我用USB接口給ft232RL供電,如下圖:
0288f358ccd0026690b2443b41d98f0f_224.png (0 Bytes, 下載次數: 12)
2010-12-14 22:54 上傳
我在這個電路的基礎上我用單片機串口和芯片對應的TX和RX相連接。
現在單片機上電,ft232不上電,測試的現象如下:
ft232的電源管腳居然有2.6V的電壓,也就是說這個電壓是由單片機TX引腳倒灌去的。
然后在這個基礎上我接上USB,發現電腦警告無法識別。
然后我給單片機斷點,直接接上USB,這樣ft232就可以正常的被主機檢測到了。
但是緊接著又給單片機上電,電腦又會報警無法識別!
下面附上串口配置代碼:
[mw_shl_code=c,true]#include
#include
#include
#include "SysDebug.h"
/*
功能:串口1IO口初始化
*/
static void USART1_GPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
//打開時鐘
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
//先將對應寄存器配置為缺省值
GPIO_StructInit(&GPIO_InitStructure);
//對應,復用、推挽
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
//復用IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
//推挽
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//GPIO_OType_OD;//GPIO_OType_PP;
//帶上拉
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
//最大相應速度為50MHZ
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//將以上設置應用于對應寄存器
GPIO_Init(GPIOB,&GPIO_InitStructure);
//對應浮空輸入模式
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
//輸入
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
//浮空
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
//將以上設置應用于對應寄存器
GPIO_Init(GPIOB,&GPIO_InitStructure);
//復用功能映射IO
//注意:不能用|配置多個!!!!!
GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_USART1);
}
/*
功能:串口1寄存器配置
*/
static void USART1_Register_Configuration(void)
{
USART_InitTypeDefUSART_InitStructure;
//打開USART1時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//配置為缺省值
USART_StructInit(&USART_InitStructure);
//設置波特率為115200
USART_InitStructure.USART_BaudRate=115200;
//傳送數據位為8位
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
//停止位為1位
USART_InitStructure.USART_StopBits=USART_StopBits_1;
//無奇偶校驗
USART_InitStructure.USART_Parity=USART_Parity_No;
//全雙工模式
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
//不采用硬件流
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
//將這些配置對應于USART1
USART_Init(USART1,&USART_InitStructure);
//使能串口
USART_Cmd(USART1,ENABLE);
}
/*
功能:通信口初始化
*/
voidCom2HostInit(void)
{
USART1_GPIO_Configuration();
USART1_Register_Configuration();
}
/*
功能:重定向C庫函數printf到USART1
注意:要在編譯器中選中->Use MicroLIB(使用微庫)
使用:定義好這個函數后,就可以直接使用->printf()函數
*/
int fputc(int ch,FILE*f)
{
//將Printf內容送往串口
USART_SendData(USART1,(unsigned char)ch);
//等待發送完成
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return (ch);
}
[/mw_shl_code]
我試過把TX配置為開漏上拉,這樣FT232電源口電壓就變為0.8V,但是依然不能被正常識別!
所以現在的問題就是:
在單片機上電,FT232不上電的情況下,單片機串口管腳電壓會倒灌到芯片中,并且這個會影響電腦無法識別FT232,
請問該怎么解決?