你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F4 USART不正常

[复制链接]
suna-2027220 提问时间:2015-1-4 23:21 /
大家帮我看看,我的USART设置哪里有问题,为什么我用串口发送ab,一会接收正常,一会接受又不正常。
正常接收:

正常接收

正常接收


接收不正常:

接收不正常时的Hex格式

接收不正常时的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);
}



收藏 评论19 发布时间:2015-1-4 23:21

举报

19个回答
feiante 回答时间:2015-1-4 23:34:26
把while放到发送语句后面呢?就是发完在while然后再发再while
suna-2027220 回答时间:2015-1-4 23:41:58
feiante 发表于 2015-1-4 23:34
把while放到发送语句后面呢?就是发完在while然后再发再while

我照你说的试了试,问题还是存在,是不是跟我用USB HUB有关系?
晓枫VS枯叶 回答时间:2015-1-5 08:28:11
楼主用的407的板子吗?时钟设置的没有问题吧!
feiante 回答时间:2015-1-5 08:42:44
加点延时呢?最好连上JLink或ST-link看看
那片清茶 回答时间:2015-1-5 09:07:52
你是不是用了F4的discovery,里面有个串口跟USB口是共用的。。
suna-2027220 回答时间:2015-1-5 11:37:56
那片清茶 发表于 2015-1-5 09:07
你是不是用了F4的discovery,里面有个串口跟USB口是共用的。。

是用的F4,但是这个USART没有被占用的,我确认过了。如果被占用就不会收到数据的!
suna-2027220 回答时间:2015-1-5 11:38:40
晓枫VS枯叶 发表于 2015-1-5 08:28
楼主用的407的板子吗?时钟设置的没有问题吧!

用的F429,时钟其他模块没有问题,检查过了!
回答时间:2015-1-5 11:41:45
把发送频率降低试试,另外每次发送加一个小延时。
晓枫VS枯叶 回答时间:2015-1-5 12:22:16
本帖最后由 晓枫VS枯叶 于 2015-1-5 12:23 编辑

我也用过429,没出现这种问题,把SysInit()函数贴出来看看吧,你是基于标准库自己写的吧,表示自己用的时候没有写这个函数,而是改了几个底层的参数就够了!
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版