STM32F4 USART不正常
大家帮我看看,我的USART设置哪里有问题,为什么我用串口发送ab,一会接收正常,一会接受又不正常。正常接收:
接收不正常:
int main(void){
SysInit();
USART1_Configure();
//NVIC_Configure();
while(1){
//Delayms(100);
while(RESET == USART_GetFlagStatus(USART1,USART_FLAG_TXE));
USART_SendData(USART1,'a');
while(RESET == USART_GetFlagStatus(USART1,USART_FLAG_TXE));
USART_SendData(USART1,'b');
}
}
void USART1_Configure(void){
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
USART_InitStruct.USART_BaudRate=115200;
USART_InitStruct.USART_WordLength=USART_WordLength_8b;
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStruct.USART_Parity=USART_Parity_No;
USART_InitStruct.USART_StopBits=USART_StopBits_1;
USART_Init(USART1,&USART_InitStruct);
//USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);
//USART_ITConfig(UART4,USART_IT_TXE,ENABLE);
USART_Cmd(USART1,ENABLE);
}
把while放到发送语句后面呢?就是发完在while然后再发再while feiante 发表于 2015-1-4 23:34
把while放到发送语句后面呢?就是发完在while然后再发再while
我照你说的试了试,问题还是存在,是不是跟我用USB HUB有关系? 楼主用的407的板子吗?时钟设置的没有问题吧! 加点延时呢?最好连上JLink或ST-link看看 你是不是用了F4的discovery,里面有个串口跟USB口是共用的。。 那片清茶 发表于 2015-1-5 09:07
你是不是用了F4的discovery,里面有个串口跟USB口是共用的。。
是用的F4,但是这个USART没有被占用的,我确认过了。如果被占用就不会收到数据的! 晓枫VS枯叶 发表于 2015-1-5 08:28
楼主用的407的板子吗?时钟设置的没有问题吧!
用的F429,时钟其他模块没有问题,检查过了! 把发送频率降低试试,另外每次发送加一个小延时。 本帖最后由 晓枫VS枯叶 于 2015-1-5 12:23 编辑
我也用过429,没出现这种问题,把SysInit()函数贴出来看看吧,你是基于标准库自己写的吧,表示自己用的时候没有写这个函数,而是改了几个底层的参数就够了!
页:
[1]
2