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

关于STM32F103RCT6串口重定向数据发送和接收

[复制链接]
snyanglq 提问时间:2015-2-4 11:54 /
本帖最后由 snyanglq 于 2015-2-4 11:56 编辑

不知道各位有没有出现过这样的情况,我使用STM32F103RCT6芯片编写串口程序,重定向printf函数到串口1,数据可以正常地发送和接收,但是有个问题
我仿真的时候发现,我每次用printf发出去的数据,接收数组同样会接收到,举个例子,我用串口发送123到上位机,上位机发送456回到MCU,我在中断的
接收函数里的数组 W_Rec[]会接收到123456,本来应该是456才对,我想问下是不是重定向后都会这样,如果不是要如何解决?请大家指点下小弟

附一下代码:
串口配置
  1. void USART1_Init(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         USART_InitTypeDef USART_InitStructure;
  5.         
  6.         /* config USART1 clock */
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
  8.         
  9.         /* USART1 GPIO config */
  10.         /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.         GPIO_Init(GPIOA, &GPIO_InitStructure);   
  15.         /* Configure USART1 Rx (PA.10) as input floating */
  16.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  18.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  19.         
  20.         /* USART1 mode config */
  21.         USART_InitStructure.USART_BaudRate = 115200;
  22.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  23.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  24.         USART_InitStructure.USART_Parity = USART_Parity_No ;
  25.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  26.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  27.         USART_Init(USART1, &USART_InitStructure);
  28.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  29.         
  30.         USART_Cmd(USART1, ENABLE);
  31. }
复制代码
  1. void USART1_NVIC(void)
  2. {
  3.         NVIC_InitTypeDef NVIC_InitStructure;
  4.         //分配到第0组
  5.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  6.         
  7.         /* Enable the USARTy Interrupt */
  8.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;         
  9.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级
  10.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//响应优先级
  11.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  12.         NVIC_Init(&NVIC_InitStructure);
  13. }
复制代码
重定向函数
  1. int fputc(int ch, FILE *f)
  2. {
  3.         /* 将Printf内容发往串口 */
  4.         USART_SendData(USART1, (unsigned char) ch);
  5.         while (!(USART1->SR & USART_FLAG_TXE));
  6.         
  7.         return (ch);
  8. }
复制代码
中断函数
  1. void USART1_IRQHandler(void)
  2. {
  3.         uint8_t c;
  4.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  5.         {         
  6.                    USART_ClearITPendingBit(USART1, USART_IT_RXNE);
  7.            // W_Rec[wn++] = USART1->DR;
  8.                         c = USART_ReceiveData(USART1);
  9.                         W_Rec[wn++] = c;

  10.         }
  11.          
  12. }
复制代码
请大家指点下如何才能不接收MCU发出去的数据

收藏 评论2 发布时间:2015-2-4 11:54

举报

2个回答
沐紫 回答时间:2015-2-5 09:57:28
顶,另外建议提问发布悬赏贴,赠送ST金币,大家会更热心来帮你的。我们也会补发金币给你
snyanglq 回答时间:2015-2-5 17:15:15
原来是我的程序关回显部分出了问题,不好意思,麻烦大家了

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版