[STM32F4] STM32F4 Discovery 串口在打印乱码?

[复制链接]
2669|6
 楼主| dawei360 发表于 2014-3-9 13:56 | 显示全部楼层 |阅读模式
本帖最后由 dawei360 于 2014-3-9 14:15 编辑

  自己有个MAX232 +DB9 直接用USART2 打印输出,出现乱码, 目前怀疑是由于STLINK 占用了USART1 导致,不知道大神们遇到过这种问题没有?
usart2.jpg
代码如下:
  1. 初始化:
  2. void  MyUartInit(void )
  3. {
  4.         GPIO_InitTypeDef  UartGpio;           
  5.         USART_InitTypeDef  MyUSARTInit;
  6.        
  7.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);  //´®¿ÚʱÖÓʹÄÜ
  8.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD ,ENABLE);  //GPIOD¿ÚʱÖÓʹÄÜ
  9.        
  10.          
  11.         UartGpio.GPIO_Pin = GPIO_Pin_5 ;                  //USART_TX
  12.         UartGpio.GPIO_Mode = GPIO_Mode_OUT;
  13.         UartGpio.GPIO_Speed = GPIO_Speed_50MHz;
  14.         GPIO_Init(GPIOD, &UartGpio);               


  15.         UartGpio.GPIO_Pin =GPIO_Pin_6;     //USART_RX
  16.         UartGpio.GPIO_Mode = GPIO_Mode_IN;
  17.         GPIO_Init(GPIOD, &UartGpio);
  18.        
  19.        

  20.         MyUSARTInit.USART_BaudRate = 115200;                                                                       
  21.         MyUSARTInit.USART_WordLength = USART_WordLength_8b;
  22.         MyUSARTInit.USART_StopBits = USART_StopBits_1;                       
  23.         MyUSARTInit.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;  
  24.         MyUSARTInit.USART_HardwareFlowControl = USART_HardwareFlowControl_None;          
  25.         MyUSARTInit.USART_Parity = USART_Parity_No;         
  26.        
  27.        
  28.         USART_Init(USART2, &MyUSARTInit);                       
  29.         USART_Cmd(USART2, ENABLE);                                               
  30.        
  31. }

重定义输出函数:

  1. int fputc(int ch, FILE *f)                        //???????
  2. {
  3.         USART_SendData(USART2, (uint16_t)ch);
  4.           while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
  5.         return (ch);
  6. }


  7. int fgetc(FILE *f)
  8. {
  9.                
  10.                 while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);

  11.                 return (int)USART_ReceiveData(USART2);
  12. }

测试函数:
  1. void UartTest(void )
  2. {
  3.         printf("\rhelloworld\n");
  4. }

测试效果:
1.jpg
乱码

我目前试试下载完成后改用3.3V直接供电,串口,不用STLINK(还在尝试)。
大神们有什么建议,拍板吧



一清如水 发表于 2014-3-9 14:42 | 显示全部楼层
GPIO_PinAFConfig()没看到这个复用的关联函数的调用,难道我记错了
 楼主| dawei360 发表于 2014-3-9 18:04 | 显示全部楼层
一清如水 发表于 2014-3-9 14:42
GPIO_PinAFConfig()没看到这个复用的关联函数的调用,难道我记错了

不用吧,M4 上要写复用么,我其实已经指定了,发送和接受口,M3上是不用的
 楼主| dawei360 发表于 2014-3-9 22:55 | 显示全部楼层
一清如水 发表于 2014-3-9 14:42
GPIO_PinAFConfig()没看到这个复用的关联函数的调用,难道我记错了

谢谢,M4和M3的区别啊,就是这个函数,哈哈,谢谢
一清如水 发表于 2014-3-9 23:04 | 显示全部楼层
dawei360 发表于 2014-3-9 22:55
谢谢,M4和M3的区别啊,就是这个函数,哈哈,谢谢

F1 与 F4还是有不少区别的,F2与F4很相似
 楼主| dawei360 发表于 2014-3-10 22:27 | 显示全部楼层
一清如水 发表于 2014-3-9 23:04
F1 与 F4还是有不少区别的,F2与F4很相似

嗯,我去找找F2的资料
dickdick117 发表于 2014-3-21 19:32 | 显示全部楼层
stlink 会占用串口吗?  目测有个 TX RX是空 连排针都焊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

738

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部