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

关于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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版