本帖最后由 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);
- //↑清除发送标志。这个是在看视频的时候人家说解决第一个字节不正确的问题。在我的板子上发现没这个也可以正确输出一个字符
- }
|