大家帮我看看,我的USART设置哪里有问题,为什么我用串口发送ab,一会接收正常,一会接受又不正常。 正常接收: æ£å¸¸æ¥æ¶ 接收不正常: æ¥æ¶ä¸æ£å¸¸æ¶çHexæ ¼å¼ 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); } |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
void SysInit(void)
{
//Resets the RCC clock configuration to the default reset state
RCC_DeInit();
//Configures the External High Speed oscillator (HSE)
RCC_HSEConfig(RCC_HSE_ON);
//Waits for HSE start-up
while( RCC_WaitForHSEStartUp() != SUCCESS );
//Configures the main PLL clock source, multiplication and division factors
//M=8,N=360,P=16,Q=7
RCC_PLLConfig(RCC_PLLSource_HSE,8,360,2,7);
//Enables or disables the main PLL
RCC_PLLCmd(ENABLE);
//Configures the system clock (SYSCLK)
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//Loop until the PLL become the SYSCLK source
while(RCC_GetSYSCLKSource() != 0x08)
//Configures the AHB clock (HCLK)
RCC_HCLKConfig(RCC_HCLK_Div1);
//Configures the Low Speed APB clock (PCLK1)
RCC_PCLK1Config(RCC_HCLK_Div4);
//Configures the High Speed APB clock (PCLK2).
RCC_PCLK2Config(RCC_HCLK_Div2);
}
大伙们分析分析:
去掉下面两句就OK了!
//GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
//GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
我照你说的试了试,问题还是存在,是不是跟我用USB HUB有关系?
是用的F4,但是这个USART没有被占用的,我确认过了。如果被占用就不会收到数据的!
用的F429,时钟其他模块没有问题,检查过了!
我也用过429,没出现这种问题,把SysInit()函数贴出来看看吧,你是基于标准库自己写的吧,表示自己用的时候没有写这个函数,而是改了几个底层的参数就够了!
是不是应该看看PLL_M呢??
这个是我抓到的Clock:
Clock该没有什么问题。