[STM32F1] 问个usart调试时的问题

[复制链接]
1663|4
 楼主| apple_3275 发表于 2014-1-16 12:37 | 显示全部楼层 |阅读模式
本帖最后由 apple_3275 于 2014-1-16 12:39 编辑

我买了一块stm32f103vet6的开发板,供电和USART1通讯都由USB转RS232的接口提供,假如我再引一根PA9的线,用另一块USB转串口模块连接电脑,用串口监控软件监控它输出,发现我用USART1 printf一条字符串,监控结果是这条字符串输出不正常,还会触发USART1的接收中断;

以下是测试代码:
  1. int main(void)
  2. {
  3.         u8 t = 0;
  4.         u8 len;        
  5.         u16 times=0;         
  6.         char str[64];
  7.          SystemInit();
  8.         delay_init(72);
  9.         NVIC_Configuration();
  10.         uart_init(115200);
  11.          LED_Init();
  12.         printf("USART Send Start\n");
  13.         while(1)
  14.         {
  15.         }         

  16. }
USART1配置
  1. #pragma import(__use_no_semihosting)            
  2.             
  3. struct __FILE
  4. {
  5.     int handle;

  6. };
  7. FILE __stdin;
  8. FILE __stdout;      

  9. _sys_exit(int x)
  10. {
  11.     x = x;
  12. }

  13. int fputc(int ch, FILE *f)
  14. {      
  15.     while((USART1->SR&0X40)==0);
  16.     USART1->DR = (u8) ch;      
  17.     return ch;
  18. }
  19. #endif

  20.   
  21. u8 USART_RX_BUF[64];

  22. u8 USART_RX_STA=0;

  23. void uart_init(u32 bound){

  24.     GPIO_InitTypeDef GPIO_InitStructure;
  25.     USART_InitTypeDef USART_InitStructure;
  26.     NVIC_InitTypeDef NVIC_InitStructure;
  27.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 \
  28.       | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
  29.      
  30.     //USART1_TX   PA.9
  31.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  32.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  33.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  34.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  35.    
  36.     //USART1_RX      PA.10
  37.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  38.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  39.     GPIO_Init(GPIOA, &GPIO_InitStructure);  

  40.    //Usart1 NVIC

  41.     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  42.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
  43.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

  44.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  45.     NVIC_Init(&NVIC_InitStructure);
  46.          
  47.     USART_InitStructure.USART_BaudRate = bound;
  48.     USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  49.     USART_InitStructure.USART_StopBits = USART_StopBits_1;
  50.     USART_InitStructure.USART_Parity = USART_Parity_No;
  51.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  52.     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  53.     USART_Init(USART1, &USART_InitStructure);
  54.    

  55.     USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  56.    
  57.     USART_Cmd(USART1, ENABLE);

  58. }

  59. void USART1_IRQHandler(void)
  60. {
  61.     u8 Res;
  62.     printf("USART1 IRQ\n");
  63.     if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  64.     {
  65.         Res =USART_ReceiveData(USART1);
  66.          
  67.         if((USART_RX_STA&0x80)==0)
  68.         {
  69.             if(USART_RX_STA&0x40)
  70.             {
  71.                 if(Res!=0x0a)USART_RX_STA=0;
  72.                 else USART_RX_STA|=0x80;
  73.             }
  74.             else
  75.             {   
  76.                 if(Res==0x0d)USART_RX_STA|=0x40;
  77.                 else
  78.                 {
  79.                     USART_RX_BUF[USART_RX_STA&0X3F]=Res ;
  80.                     USART_RX_STA++;
  81.                     if(USART_RX_STA>63)USART_RX_STA=0;
  82.                 }         
  83.             }
  84.             }            
  85.          }
  86. }


以下是输出结果
  1. USART Send Start<LF>
  2. USART1 IRQ<LF>
  3. USART1 IRQ<LF>
  4. USART1 IRQ<LF>
  5. USART1 IRQ<LF>
  6. USART Send Start<LF>
  7. USART Send Start<LF>
  8. USART Send Start<LF>
ruiyang89 发表于 2014-1-16 13:38 | 显示全部楼层
这样监视有什么用呢?既然你都能收到串口数据了,要监视也是看串口助手发的数据啊。
还有这个问题,是不是由于没有共地,还有要注意监视的时候只需要用到接收引脚,否则就会出现问题
airwill 发表于 2014-1-16 16:53 | 显示全部楼层
初步看了一下, 感觉代码上问题不大.
楼上提到的共地是必须要处理的.
此外, 接收脚有没有置稳定的高电平, 很重要
小班儿 发表于 2014-11-27 10:09 | 显示全部楼层
学习啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

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