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

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-5 21:25:48
QianFan 发表于 2015-1-5 19:10
是不是应该看看PLL_M呢??

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);
       
}
suna-2027220 回答时间:2015-1-5 22:15:13
问题找到!!!
大伙们分析分析:
去掉下面两句就OK了!
        //GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
        //GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
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()函数贴出来看看吧,你是基于标准库自己写的吧,表示自己用的时候没有写这个函数,而是改了几个底层的参数就够了!
wamcncn 回答时间:2015-1-5 12:36:03
串口软件里的数据设置不对吧,看你的错误接收好像是字符的ASCII码
qianfan 回答时间:2015-1-5 19:10:20
晓枫VS枯叶 发表于 2015-1-5 12:22
我也用过429,没出现这种问题,把SysInit()函数贴出来看看吧,你是基于标准库自己写的吧,表示自己用的时 ...

是不是应该看看PLL_M呢??
艴小鱼 回答时间:2015-1-5 21:35:07
是时钟设置问题么?不懂,帮顶
suna-2027220 回答时间:2015-1-5 21:40:00
QianFan 发表于 2015-1-5 19:10
是不是应该看看PLL_M呢??

这个是我抓到的Clock:
2015-01-05_213834.jpg

Clock该没有什么问题。
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版