STM32F103ZET,我用USART3接收外部串口信号,通过USART2发送接收到的数据,再用USART1接收发出去的数据

STM32F103ZET,我用USART3接收外部串口信号,通过USART2发送接收到的数据,再用USART1接收发出去的数据,问题是USART接收传回来的数据时接收中断始终触发不到,接收不到数据,示波器和PC机串口工具证实是有数据发出的,求高人指点。 USART2与USART1交换,由USART1发,USART2接收,也一样,能发但收不到。 USART3正常接收,USART2和USART1是参考USART3改的。
void USART3_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3 , ENABLE);

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
// GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //管脚10
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 //TX初始化
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //管脚11
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上啦输入
GPIO_Init(GPIOB, &GPIO_InitStructure); //RX初始化

USART_InitStructure.USART_BaudRate = 9600; //波特率9600
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //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;//打开Rx接收和Tx发送功能
USART_Init(USART3, &USART_InitStructure); //初始化

USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
USART_Cmd(USART3, ENABLE);
}

void USART3_IRQHandler(void)
{
if(USART_GetFlagStatus(USART3, USART_FLAG_ORE) == SET) //若为溢出中断
{
(u16)(USART3->DR & (u16)0x01FF);
}
if(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET) //若为接收中断
{
USARTRX_DATA[Int_Count] = USART_ReceiveData(USART3);
LED2_OFF();
/* if(i==0)
{
if(USARTRX_DATA[0]==0xaa)i++;//判断帧头0xaa和0x55
}
else if(i==1)
{
if(USARTRX_DATA[1]==0x55)i++;
else i=0;
}
else i++; */
// USART_SendData(USART3, USARTRX_DATA[Int_Count]); //接受到的数据,原样回发

Int_Count++;
if(Int_Count>9)//接手\收区满
{
Int_Count = 0 ;
FullFlag = 1 ;
}
/* Loop until the end of transmission */
// while(!(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == SET)){}
LED2_ON();
}

USART_ClearITPendingBit(USART3,USART_IT_RXNE);
USART_ClearITPendingBit(USART3,USART_IT_TXE);
}

第1个回答  2014-10-24
我给你写一份吧
相似回答