当前位置: 代码迷 >> 单片机 >> STM32 USART1的有关问题
  详细解决方案

STM32 USART1的有关问题

热度:104   发布时间:2016-04-28 14:58:24.0
STM32 USART1的问题
STM32F103的datasheet也看了,照着手册和网上的程序写了下程序,可是怎么发也发不出去,在这里搞了好久,求解释看是什么问题。
硬件:STM32F103的核心板和51最小系统的串口模块。其中把PA9和51P3.1相连,PA10和51P3.0相连。也就是TxD接TxD,RxD接RxD.
程序:
void USART1_Configuration()
{
USART_InitTypeDef USART1_InitStruct;
USART_DeInit(USART1);
USART1_InitStruct.USART_BaudRate = 9600;
USART1_InitStruct.USART_WordLength = USART_WordLength_8b;
USART1_InitStruct.USART_StopBits = USART_StopBits_1;
USART1_InitStruct.USART_Parity = USART_Parity_No;
USART1_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART1_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(USART1, &USART1_InitStruct);
}

void GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; //TxD    
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; //RxD
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}

main(){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
GPIO_AFIODeInit();

GPIO_Configuration();
USART1_Configuration();
USART_Cmd(USART1, ENABLE);

while(1){
LED_Toggle();
USART_SendData(USART1, 'w');
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
}
------解决方案--------------------
应该 TxD接RxD,RxD接TxD.
------解决方案--------------------
程序本身没问题,建议查一下硬件,看看串口传输路径,一般是stm32到232串口芯片到51的232串口芯片到51单片机,也有可能你使用的串口线时交叉线,拿万用表打一下
------解决方案--------------------
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; 
改为 
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;

试试