//USART1初始化
void Uart1Init(uint32_t ulWantedBaud)
{
LL_USART_InitTypeDef USART_InitStruct = {0};
LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
/* Peripheral clock enable */
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
/**USART1 GPIO Configuration
PB6 ------> USART1_TX
PB7 ------> USART1_RX
*/
GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LL_GPIO_PIN_7;
GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
LL_GPIO_AF_EnableRemap_USART1();
//RS485方向控制端口
LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_5);
GPIO_InitStruct.Pin = LL_GPIO_PIN_3;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
USART_InitStruct.BaudRate = ulWantedBaud;
USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
USART_InitStruct.Parity = LL_USART_PARITY_NONE;
USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
LL_USART_Init(USART1, &USART_InitStruct);
LL_USART_ConfigAsyncMode(USART1);
NVIC_SetPriority(USART1_IRQn,NVIC_EncodePriority(NVIC_GetPriorityGrouping(),PRIORITY_DEF,PRIORITY_SUB));
NVIC_EnableIRQ(USART1_IRQn);
LL_USART_EnableIT_RXNE(USART1);//接收中断使能
LL_USART_Enable(USART1);
}
//UART1中断函数
void USART1_IRQHandler( void )
{
uint8_t cChar;
if(LL_USART_IsActiveFlag_TXE(USART1) != RESET )//数据空中断
{
if(有数据发送)
;//LL_USART_TransmitData8(USART1,[dat]);
else
{
LL_USART_DisableIT_TXE(USART1);
LL_USART_EnableIT_TC(USART1);
}
}
if(LL_USART_IsActiveFlag_TC(USART1) != RESET ) //发送完成中断
{
//g_Uart1SendFlag=1;
LL_USART_DisableIT_TC(USART1);
//UART1_RX_SEL;
}
if(LL_USART_IsActiveFlag_RXNE(USART1) != RESET )//接收一字节中断
{
cChar = LL_USART_ReceiveData8(USART1);
//...
}
}
|
|