本帖最后由 huangzh198 于 2013-3-25 21:20 编辑
/* GPIO初始化:GPIOA:PA9用于USART1_Tx;PA10用于USART1_Rx */
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);//PA9-USART1_Tx
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);//PA10-USART1_Rx
终于知道为什么一直不成功了。原来是GPIO的复用功能没开启,在GPIO设置那里添加上这两句就可以了。
完整代码如下
void USART_GPIOInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
/* GPIO初始化:GPIOA:PA9用于USART1_Tx;PA10用于USART1_Rx */
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);//PA9-USART1_Tx
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);//PA10-USART1_Rx
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//TX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void USART_Config(void)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //uart模式
USART_Init(USART1, &USART_InitStructure); //这个是真正的初始化,把上面的配置写到寄存器中
USART_Cmd(USART1, ENABLE);//时能UART1
// USART_ClearFlag(USART1, USART_FLAG_TC);
//↑清除发送标志。这个是在看视频的时候人家说解决第一个字节不正确的问题。在我的板子上发现没这个也可以正确输出一个字符
}
|