初级会员

- 积分
- 87
- 金钱
- 87
- 注册时间
- 2014-2-10
- 在线时间
- 10 小时
|
1金钱
原子老师:
你好!上次跟您请教了串口2,3,4,5 的配置问题,你讲串口1的配置类似,注意时钟配置就可以了。
谢谢您的提醒,我现在串口2,3,4,都成功了,可以收发数据!
但是串口5,现在只能发送,不能接收数据!配置如下:请指教!谢谢原子老师!
//==========================================================================================================================
//2016-05-32 config to the UART5 (PC12--TX D2---RX)
//=======================================================================================
void uart5_init(u32 bound){
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// notes: UART5 in APB1
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
//NOtes: GPIOC;GPIOD ;AFIO; in APB2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO ,ENABLE);
//UART5_TX PC12
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);
//UART5_RX PD2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//Uart5 NVIC
NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //
NVIC_Init(&NVIC_InitStructure); //
USART_InitStructure.USART_BaudRate = bound;//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(UART5, &USART_InitStructure);
USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);
USART_Cmd(UART5, ENABLE);
USART_ClearFlag(UART5,USART_FLAG_TC);
}
//=======================================================================================================================================
void UART5_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(UART5);
if((USART_RX_STA&0x80)==0)
{
if(USART_RX_STA&0x40)
{
if(Res!=0x0a)USART_RX_STA=0;
else USART_RX_STA|=0x80;
}
else
{
if(Res==0x0d)USART_RX_STA|=0x40;
else
{
USART_RX_BUF[USART_RX_STA&0X3F]=Res ;
USART_RX_STA++;
if(USART_RX_STA>63)USART_RX_STA=0;
}
}
}
}
}
|
|