这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【已解决】串口问题,超级终端收不到数据

共4条 1/1 1 跳转至

【已解决】串口问题,超级终端收不到数据

菜鸟
2014-04-20 00:54:11     打赏

首先上我的代码:

GPIO:


void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Configure USARTx_Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure USARTx_Rx as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}


NVIC:


void NVIC_Configuration(void)
{ 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQChannel;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=15;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
}


中断响应程序


void USART1_IRQHandler(void)
{
	while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET)
	{}
	USART_SendData(USART1,USART_ReceiveData(USART1));
	USART_ClearFlag(USART1,USART_FLAG_RXNE);
}


RCC


void RCC_Configuration(void)
{

  /* Enable GPIOx clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  /* Enable USARTx clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

}


main



int main(void)
{
#ifdef DEBUG
  debug();
#endif
  	/* System Clocks Configuration */
  	RCC_Configuration();
  	/* NVIC configuration */
  	NVIC_Configuration();
  	/* Configure the GPIO ports */
 	GPIO_Configuration();
	USART_InitStructure.USART_BaudRate=115200;
	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(USART1,&USART_InitStructure);
	USART_Cmd(USART1,ENABLE);
    while (1)
    {
		printf("\n\rUSART Printf Example: retarget the C library printf function 

to the USART\n\r");
		Delay(100000);
    }
} 


我试了两种波特率(2400,115200)都不行,我使用的是usb转串口线+超级终端,板子上的连接情况如下图:


超级终端配置如下,收不到任何信息,求大神帮忙啊,搞了几天了:




----------------------------------------------------------------------------------------------------------------------

问题出现在两个地方:pringtf函数和线的连接

使用printf函数要重新定义fputc函数,printf会回调这个函数(放在main.c中就可以),注意这个函数要设置UART端口


fputc(int ch, FILE *f)
{
  /* Write a character to the USART */
  USART_SendData(USART1, (u8) ch);

  /* Loop until the end of transmission */
  while(!(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == SET))
  {
  }

  return ch;
}



第二个问题是,TX和RX接反了,电脑的RX要接板子的TX,我接反了,真是惭愧,判断电脑上RX和TX的方法:RX的点压比TX低,usb转串口有四根线,电压关系:GND


菜鸟
2014-04-20 18:26:58     打赏
2楼
怎么转换,我是直接把usb转串口线拆了,接线出来的

菜鸟
2014-04-20 18:27:48     打赏
3楼
我用的手柄调试的,手柄上是8M的

菜鸟
2014-04-20 18:28:29     打赏
4楼
还是没用,

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]