打印
[STM32F1]

想让串口1和串口3同时实现打印输出在PC上,为什么3不正常

[复制链接]
1353|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
InsertTec|  楼主 | 2014-6-26 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

   //USART ³õʼ»¯ÉèÖÃ
  USART_InitStructure.USART_BaudRate = bound;
  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;
    //Usart1 NVIC ÅäÖÃ
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01 ;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQͨµÀʹÄÜ
  NVIC_Init(&NVIC_InitStructure);
  USART_Init(USART1, &USART_InitStructure);
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆôÖжÏ
  USART_Cmd(USART1, ENABLE);    //ʹÄÜ´®¿Ú  
}
//USART3配置
void uart3_init(u32 bound)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
   NVIC_InitTypeDef NVIC_InitStructure;
  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//GPIO_Speed_50MHz;
  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     
  GPIO_Init(GPIOB, &GPIO_InitStructure);
   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  USART_InitStructure.USART_BaudRate = bound;
  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;
  GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01 ;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   
  NVIC_Init(&NVIC_InitStructure);
  USART_Init(USART3, &USART_InitStructure);
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
  USART_Cmd(USART3, ENABLE);   
}

沙发
InsertTec|  楼主 | 2014-6-26 11:05 | 只看该作者
//USART3打印
void u3_printf(char* fmt,...)   
{  
char *p;
char USART_RX_BUF[64];
  va_list ap;
  va_start(ap,fmt);
  vsprintf(USART_RX_BUF,fmt,ap);
  
p = (char *)USART_RX_BUF;
while(*p != '\0')
{
   while((USART3->SR&0X40)==0)
   {
    ;
   }   
    USART3->DR = *p++;
}
va_end(ap);
}
//USART1打印
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0)  //Ñ »··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
{
  ;
}  
  USART1->DR = (u8) ch;  
return ch;
}

使用特权

评论回复
板凳
InsertTec|  楼主 | 2014-6-26 11:08 | 只看该作者
我是USART1作为调试串口,USART3作为输出DSP信息的串口。但是USART3工作就不正常了,有时输出有时不输出!是中断的问题吗?

使用特权

评论回复
地板
airwill| | 2014-6-26 12:06 | 只看该作者
你应该直接将
int fputc(int ch, FILE *f)
改成 USART3 .
问题在你输出的时候没有统一, printf 和 u3_printf 混用, 而 printf 系统并不支持两个端口. 当然按理说有FILE *f 这个参数可以切换 USART. 只是编译器没有很详细地给出怎么处理的说明. 恐怕内部并没有实现. 或者说留给外部实现 fputc 的时候来实现了.
int fputc(int ch, FILE *f);
既然给出了FILE *f 这个参数, 我想通过外部手段是能够实现 USART 的切换的. 但不能只是 fputc 函数里简单的 USART 的切换, 应该使用互斥机制才能实现.

使用特权

评论回复
5
InsertTec|  楼主 | 2014-6-26 17:04 | 只看该作者
airwill 发表于 2014-6-26 12:06
你应该直接将
int fputc(int ch, FILE *f)
改成 USART3 .

您说得我更糊涂了。我看网上也有人说同时两个串口可以打印,我就参照人家的例子1!我想是,printf输出USART1;u3_printf输出USART3的信息

使用特权

评论回复
6
airwill| | 2014-6-26 17:32 | 只看该作者
printf输出USART1;u3_printf输出USART3的信息, 这样处理是可以的. 那 USART3 就不能用 printf 了, 千万不可搞混咯
另外, printf 执行起来很耗时, 时间冲突的问题, 一定要处理好哦

使用特权

评论回复
7
InsertTec|  楼主 | 2014-6-26 19:20 | 只看该作者
airwill 发表于 2014-6-26 17:32
printf输出USART1;u3_printf输出USART3的信息, 这样处理是可以的. 那 USART3 就不能用 printf 了, 千万不 ...

现在正常了,我之前就是搞乱了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝