RCC_PCLK1Config(RCC_HCLK_Div2);
/* PCLK1 = HCLK/2 */
--------------------------------------------
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel; /* 使能USART1中断 */ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
-------------------------------------------
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; /* USART1 RX配置(Input Floating) */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//USART1 TX
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; /* USART1 TX配置(Push-Pull) */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
------------------------------------------------------------------------------------------------------------------------
USART_InitStructure.USART_BaudRate = USART_BAUD_9600;
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_FIFOInit(&gsUsartRxFifo[0]); /* 初始化FIFO */
USART_FIFOInit(&gsUsartTxFifo[0]);
//USART_InitStructure.USART_BaudRate = USART_BAUD_9600;
USART_Init(USART2, &USART_InitStructure);
USART_FIFOInit(&gsUsartRxFifo[1]); /* 初始化FIFO */
USART_FIFOInit(&gsUsartTxFifo[1]);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); /* 使能USART1接收中断 */
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); /* 使能USART2接收中断 */
USART_ITConfig(USART2, USART_IT_LBD, DISABLE); /* 使能USART2接收中断 */
USART_Cmd(USART1, ENABLE); /* USART1使能 */
USART_Cmd(USART2, ENABLE); /* USART1使能 */
--------------
----------------------------------------------------------------------------------------------------------------------------------------------------------
void USART2_ISR(void)
{
if (USART_GetITStatus(USART2, USART_IT_TXE) != RESET) /* 发送 */
{
USART_ITConfig(USART2, USART_IT_TXE, DISABLE); //禁止发送空中断
if (USART_FIFORead(&gsUsartTxFifo[1], &gsUsartTxBuf[1]) != USART_FIFO_EMPTY)
{
giUsartTxCount[1] = 0;
giUsartTxFlag[1] = 1; //发送数据中
USART_TXByte(USART2, gsUsartTxBuf[1].DATA[giUsartTxCount[1]++]);
USART_ITConfig(USART2, USART_IT_TC, ENABLE); //使能发送完成中断
}
else
{
USART_ITConfig(USART2, USART_IT_TC, DISABLE);
}
}
if (USART_GetITStatus(USART2, USART_IT_TC) == SET) /* 发送完成 */
{
if (giUsartTxCount[1] < gsUsartTxBuf[1].SIZE)
{
USART_TXByte(USART2, gsUsartTxBuf[1].DATA[giUsartTxCount[1]++]);
}
else
{
if (USART_FIFOStatus(&gsUsartTxFifo[1]) != 0)
{
USART_ITConfig(USART2, USART_IT_TXE, ENABLE); //FIFO还有数据,准备发送
}
else
{
giUsartTxFlag[1] = 0; //发送完
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
USART_ITConfig(USART2, USART_IT_TC, DISABLE);
USART2_RX_EN(); //发送完毕即切换至接收使能,半双工处理方式
}
}
}
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
USART_Str[1].USART_Rx_Buf[USART_Str[1].USART_Rx_H]=USART_ReceiveData(USART2);
USART_Str[1].USART_Rx_H++;
if(USART_Str[1].USART_Rx_H>=USART_RX_LENGTH)
USART_Str[1].USART_Rx_H=0;
}
}
-----------------------------
硬件仿真发现USART_SR_LBD总是1;所有寄存器我看了。串口1和串口2就这个位寄存器值不同。求帮助!