下面是我的GPIO初始化函数,在关闭DE定义时可以发送数据,打开后就发送不了。
static void uart_init_gpio(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
/* USART pins configuration
* USART_TX: PA9
* USART_RX: PA10
*/
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Rx (PA.10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
#if (0)
/* Configure GPIOA.11 (DE pin) as output push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
#endif
}
下面是我的发送函数,在发送完后调用GPIO_WriteBit拉低,使可接受。
INT32S Uart1_Write(INT8U *buf, INT32S len)
{
INT32S i = 0;
INT32S send_len = 0;
#if (UART_SEND_TYPE)
DMA1_UART1_TX(buf, len);
send_len = len;
#else
/* Set flag to send data */
for (i = 0; i < len; ++i) {
USART_SendData(USART1, *(buf + send_len));
send_len++;
while (RESET == USART_GetFlagStatus(USART1, USART_FLAG_TC));
}
/* Set flag to receive data */
// GPIO_WriteBit(GPIOA, GPIO_Pin_11, Bit_RESET);
#endif
return send_len;
}
因为我这个是在初始化后先发送数据,因此就没有先PIN11为低电平。
但是现在就DE使能的GPIO初始化不行,请高手帮忙查看一下GPIO该怎么定义?
谢谢了!
|