野火电子论坛

 找回密码
 注册

扫一扫,访问微社区

查看: 115|回复: 2

[F0/F1/F2] STM32 串口不能循环输出问题

[复制链接]
发表于 2019-12-20 11:00:45 | 显示全部楼层 |阅读模式
各位大佬,帮忙看看,我需要从外部采集到电压信号,经过采集处理后,通过串口输出给上位机。现在是想用UART2去发送AD转换后的数据。只需要发送数据就可以了。下面是UART相关的配置:

void USART_Config(void)
{      GPIO_InitTypeDef GPIO_InitStructure;        USART_InitTypeDef USART_InitStructure;
        DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
        DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);

        GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
        
        USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No ;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(DEBUG_USARTx, &USART_InitStructure);
        
        NVIC_Configuration();
        USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);        
        USART_Cmd(DEBUG_USARTx, ENABLE);               
        USART_ClearFlag(USART1, USART_FLAG_TC);     
}

/// 重定向C库函数printf到USART2
int fputc(int ch, FILE *f)
{
                DEBUG_USARTx->SR;
                USART_SendData(DEBUG_USARTx, (uint8_t) ch);
                while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE)== RESET);               
                return (ch);
}

int main ( void )
{

  int i=0;
float ADval=0;
        USART_Config ();                                                         
        SysTick_Init ();                                                        
        
        AdcInit();
               
        Set_Adc(ADC_Channel_6);
        LED_ON;
        Delay_ms(10);
        while(1)
        {
                for(i=0;i<3;i++)
        {
                LED_ON;
                Delay_ms(5);
                ADval=Get_ADValue();
        //        printf("OD:%.3f \r\n",ADval*3.3/4096);        
                printf("OD:%.3f \r\n",ADval);
        }
        
        for(i=0;i<3;i++)
        {
                LED_OFF;
                Delay_ms(5);
                ADval=Get_ADValue();
        //        printf("OD:%.3f \r\n",ADval*3.3/4096);        
                printf("OD:%.3f \r\n",ADval);
        }
        
}        

目前串口调试助手上可以正确显示,但是只有很短的一段时间,需要断电后,重新连接,再发送一部分。我希望是可以一直发送数据。也是刚接触这个编程不久,看了不少的帖子,还有例子,还是弄的不是很清楚,

没有传完整就停了,感觉像是设定的时间到了一样,不知道该从哪里去找

串口2.png
回复

使用道具 举报

 楼主| 发表于 2019-12-20 13:44:53 | 显示全部楼层
我直接用21-USART—串口通信的例子程序,加了while(1)循环,串口助手也是接收到一部分数据,后面出现乱码,就停了

int main(void)
{          /*初始化USART配置模式为 115200 8-N-1,中断接收*/
  USART_Config();
       
        /* 发送一个字符串 */       
  while(1)
        {       
                Usart_SendString( DEBUG_USARTx,"这是一个串口中断接收回显实验\n");
        }       
}
串口3.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-21 10:03:01 | 显示全部楼层
有人帮忙看看么
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

野火电子公众号

手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 大学生ARM嵌入式2群

GMT+8, 2020-2-23 09:08 , Processed in 0.148511 second(s), 30 queries , Gzip On.

野火电子论坛

© 2014-2016 www.firebbs.cn

快速回复 返回顶部 返回列表