STM32F103RCT6的5串口使用基于库函数
1.
u8 uart1_rx_buf[128];
u8 uart1_rx_len;
u8 uart1_rx_done=0;
u8 uart2_rx_buf[128];
u8 uart2_rx_len;
u8 uart2_rx_done=0;
u8 uart3_rx_buf[128];
u8 uart3_rx_len;
u8 uart3_rx_done=0;
u8 uart4_rx_buf[128];
u8 uart4_rx_len;
u8 uart4_rx_done=0;
u8 uart5_rx_buf[128];
u8 uart5_rx_len;
u8 uart5_rx_done=0;
u16 times=0;
void Uart1_Init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);
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);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_InitStructure.USART_BaudRate = bound;
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_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);
USART_Cmd(USART1, ENABLE);
}
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
uart1_rx_buf[uart1_rx_len]=USART_ReceiveData(USART1);
uart1_rx_len++;
}
else if(USART_GetITStatus(USART1, USART_IT_IDLE) == SET)
{
USART1->SR;
USART1->DR;
uart1_rx_done=1;
}
else
{
}
}
u8 Usart1_Send(u8 * data,u16 len)
{
u16 i=0;
if(len<1)return 0;
for(i=0;i<len;i++)
{
USART_SendData(USART1,data[i]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
return 1;
}
void Uart2_Init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
USART_DeInit(USART2);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_InitStructure.USART_BaudRate = bound;
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(USART2, &USART_InitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);
USART_Cmd(USART2, ENABLE);
}
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
{
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
uart2_rx_buf[uart2_rx_len]=USART_ReceiveData(USART2);
uart2_rx_len++;
}
else if(USART_GetITStatus(USART2, USART_IT_IDLE) == SET)
{
USART2->SR;
USART2->DR;
uart2_rx_done=1;
}
else
{
}
}
u8 Usart2_Send(u8 * data,u16 len)
{
u16 i=0;
if(len<1)return 0;
for(i=0;i<len;i++)
{
USART_SendData(USART2,data[i]);
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
}
return 1;
}
void Uart3_Init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
USART_DeInit(USART3);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_InitStructure.USART_BaudRate = bound;
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(USART3, &USART_InitStructure);
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);
USART_Cmd(USART3, ENABLE);
}
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
{
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
uart3_rx_buf[uart3_rx_len]=USART_ReceiveData(USART3);
uart3_rx_len++;
}
else if(USART_GetITStatus(USART3, USART_IT_IDLE) == SET)
{
USART3->SR;
USART3->DR;
uart3_rx_done=1;
}
else
{
}
}
u8 Usart3_Send(u8 * data,u16 len)
{
u16 i=0;
if(len<1)return 0;
for(i=0;i<len;i++)
{
USART_SendData(USART3,data[i]);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
}
return 1;
}
void Uart4_Init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
USART_DeInit(UART4);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_InitStructure.USART_BaudRate = bound;
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(UART4, &USART_InitStructure);
USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
USART_ITConfig(UART4, USART_IT_IDLE, ENABLE);
USART_Cmd(UART4, ENABLE);
}
void UART4_IRQHandler(void)
{
if(USART_GetITStatus(UART4, USART_IT_RXNE) == SET)
{
USART_ClearITPendingBit(UART4, USART_IT_RXNE);
uart4_rx_buf[uart4_rx_len]=USART_ReceiveData(UART4);
uart4_rx_len++;
}
else if(USART_GetITStatus(UART4, USART_IT_IDLE) == SET)
{
UART4->SR;
UART4->DR;
uart4_rx_done=1;
}
else
{
}
}
u8 Usart4_Send(u8 * data,u16 len)
{
u16 i=0;
if(len<1)return 0;
for(i=0;i<len;i++)
{
USART_SendData(UART4,data[i]);
while(USART_GetFlagStatus(UART4,USART_FLAG_TC)!=SET);
}
return 1;
}
void Uart5_Init(u32 bound)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
USART_DeInit(UART5);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_InitStructure.USART_BaudRate = bound;
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(UART5, &USART_InitStructure);
USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);
USART_ITConfig(UART5, USART_IT_IDLE, ENABLE);
USART_Cmd(UART5, ENABLE);
}
void UART5_IRQHandler(void)
{
if(USART_GetITStatus(UART5, USART_IT_RXNE) == SET)
{
USART_ClearITPendingBit(UART5, USART_IT_RXNE);
uart5_rx_buf[uart5_rx_len]=USART_ReceiveData(UART5);
uart5_rx_len++;
}
else if(USART_GetITStatus(UART5, USART_IT_IDLE) == SET)
{
UART5->SR;
UART5->DR;
uart5_rx_done=1;
}
else
{
}
}
u8 Usart5_Send(u8 * data,u16 len)
{
u16 i=0;
if(len<1)return 0;
for(i=0;i<len;i++)
{
USART_SendData(UART5,data[i]);
while(USART_GetFlagStatus(UART5,USART_FLAG_TC)!=SET);
}
return 1;
}
void Usart_Progess()
{
if(uart1_rx_done==1)
{
Usart1_Send(uart1_rx_buf,uart1_rx_len);
uart1_rx_len=0;
uart1_rx_done=0;
}
if(uart2_rx_done==1)
{
Usart2_Send(uart2_rx_buf,uart2_rx_len);
uart2_rx_len=0;
uart2_rx_done=0;
}
if(uart3_rx_done==1)
{
Usart3_Send(uart3_rx_buf,uart3_rx_len);
uart3_rx_len=0;
uart3_rx_done=0;
}
if(uart4_rx_done==1)
{
Usart4_Send(uart4_rx_buf,uart4_rx_len);
uart4_rx_len=0;
uart4_rx_done=0;
}
if(uart5_rx_done==1)
{
Usart5_Send(uart5_rx_buf,uart5_rx_len);
uart5_rx_len=0;
uart5_rx_done=0;
}
}
u8 a[2]={0x05,0x04};
int main(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
IWDG_Init(4,2500);
Uart1_Init(115200);
Uart2_Init(115200);
Uart3_Init(115200);
Uart4_Init(115200);
Uart5_Init(115200);
All_GPIO_Init();
Timer1_Init(999,71);
while(1)
{
Time_Cycle();
IWDG_Feed();
Usart_Progess();
}
}