|
//仿UART0例程写的UART4的程序,发送接收中断都是能,就是不能进发送中断
void UART4_IRQHandler(void)
{
u8 tmp08;
u8 i,j;
//FL_UART_DisableIT_TXBuffEmpty(UART0);
//接收中断处理
if((ENABLE == FL_UART_IsEnabledIT_RXBuffFull(UART4))
&&(SET == FL_UART_IsActiveFlag_RXBuffFull(UART4)))
{
//中断转发接收到的数据
tmp08 = FL_UART_ReadRXBuff(UART4);//接收中断标志可通过读取rxreg寄存器清除
}
//发送中断处理
if((ENABLE == FL_UART_IsEnabledIT_TXShiftBuffEmpty(UART4)) //疑惑的地方,中断一直进不来。
&&(SET == FL_UART_IsActiveFlag_TXShiftBuffEmpty(UART4)))
{
//发送中断标志可通过写txreg寄存器清除或txif写1清除
//发送指定长度的数据
if(UART4Op.TxOpc < UART4Op.TxLen)
{
FL_UART_WriteTXBuff(UART4, UART4Op.TxBuf[UART4Op.TxOpc]); //发送一个数据
UART4Op.TxOpc++;
}
else
{
SEND_OVER_FLAG=1;
FL_UART_DisableIT_TXShiftBuffEmpty(UART4);
FL_UART_EnableIT_RXBuffFull(UART4);
}
FL_UART_ClearFlag_TXShiftBuffEmpty(UART4); //清除发送中断标志
}
}
void Uart4_Init(void)
{
FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
FL_UART_InitTypeDef UART_InitStruct = {0};
//PA0:UART0-RX PA1:UART0-TX
GPIO_InitStruct.pin = FL_GPIO_PIN_0|FL_GPIO_PIN_1;
GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL; //推挽输出
GPIO_InitStruct.pull = DISABLE;
GPIO_InitStruct.remapPin = DISABLE;
FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
//UART_InitStruct.clockSrc = FL_RCC_GROUP3_BUSCLK_UART4;
UART_InitStruct.baudRate = 38400; //波特率
UART_InitStruct.dataWidth = FL_UART_DATA_WIDTH_8B; //数据位数
UART_InitStruct.stopBits = FL_UART_STOP_BIT_WIDTH_1B; //停止位
UART_InitStruct.parity = FL_UART_PARITY_NONE; //奇偶校验
UART_InitStruct.transferDirection = FL_UART_DIRECTION_TX_RX; //接收-发送使能
FL_UART_Init(UART4, &UART_InitStruct);
FL_UART_EnableIT_RXBuffFull(UART4);
FL_UART_EnableIT_TXShiftBuffEmpty(UART4);
/*NVIC中断配置*/
NVIC_DisableIRQ(UART4_IRQn);
NVIC_SetPriority(UART4_IRQn,2);//中断优先级配置
NVIC_EnableIRQ(UART4_IRQn);
}
|
|