枫寒。 发表于 2017-10-8 21:18:32

stm32f407串口2程序问题,不能正常运行

void usart2_Init(u32 bound)
{
        GPIO_InitTypeDef GPIO_InitStuer;
        USART_InitTypeDef USART_InitStuer;
        NVIC_InitTypeDef NVIC_InitStuer;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //ʹÄÜGPIOAʱÖÓ
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//ʹÄÜUSART2ʱÖÓ
       
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2¸´ÓÃΪUSART2
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3¸´ÓÃΪUSART2
       
        GPIO_InitStuer.GPIO_Mode=GPIO_Mode_AF;
        GPIO_InitStuer.GPIO_OType=GPIO_OType_PP;
        GPIO_InitStuer.GPIO_Pin=GPIO_Pin_2 | GPIO_Pin_3;
        GPIO_InitStuer.GPIO_PuPd=GPIO_PuPd_UP;
        GPIO_InitStuer.GPIO_Speed=GPIO_Speed_100MHz;
        GPIO_Init(GPIOA,&GPIO_InitStuer);
       
        USART_InitStuer.USART_BaudRate=bound;
        USART_InitStuer.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStuer.USART_Mode= USART_Mode_Rx | USART_Mode_Tx;
        USART_InitStuer.USART_Parity=USART_Parity_No;   //ÎÞÆæÅ¼Ð£Ñéλ
        USART_InitStuer.USART_StopBits=USART_StopBits_1;   //ÎÞÓ²¼þÁ÷¿ØÖÆ
        USART_InitStuer.USART_WordLength=USART_WordLength_8b;
        USART_Init(USART2,&USART_InitStuer);
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
       
        NVIC_InitStuer.NVIC_IRQChannel=USART2_IRQn;
        NVIC_InitStuer.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStuer.NVIC_IRQChannelPreemptionPriority=2;
        NVIC_InitStuer.NVIC_IRQChannelSubPriority=2;
        NVIC_Init(&NVIC_InitStuer);
       
        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);   //½ÓÊÜÖжÏ
        USART_Cmd(USART2,ENABLE);    //ʹÄÜ´®¿Ú2
}来帮忙找找错误吧,程序看着没有问题啊。

主函数发送0x11电脑都收不到。
USART_SendData(USART2,0x11);
                        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) != RESET);不清楚,有能帮忙检查下的嘛。
多谢了

MrJiu 发表于 2017-10-9 09:23:38

1、使用cube配置
2、用示波器查看波形。。。

枫寒。 发表于 2017-10-9 13:15:46

不会使用cube。。。。程序应该是没有问题吧

衔胆栖冰 发表于 2017-10-9 20:28:23

GPIO_InitStuer.GPIO_Pin=GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStuer.GPIO_PuPd=GPIO_PuPd_UP;
初始化发送IO复用推挽输出,接收IO复用浮空输入。

枫寒。 发表于 2017-10-9 20:49:50

衔胆栖冰 发表于 2017-10-9 20:28
GPIO_InitStuer.GPIO_Pin=GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStuer.GPIO_PuPd=GPIO_PuPd_UP;
初始化发送IO ...

F4的配置和F1的一样吗。我看的F4例程里面给的是发送和接受都是复用推挽

衔胆栖冰 发表于 2017-10-10 09:16:07

请参考官方标准库demo

发表于 2017-10-10 09:51:33

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
                GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
                GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
               
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
                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);上面代码我测试没问题,楼主可以仿真一下配置完成后,串口寄存器的值、IO寄存器的值、系统时钟寄存器的值。另外看一下电路板实际使用的IO口。
电脑RX接MCUTX,TX接MCURX
页: [1]
查看完整版本: stm32f407串口2程序问题,不能正常运行