初级会员

- 积分
- 65
- 金钱
- 65
- 注册时间
- 2019-4-19
- 在线时间
- 13 小时
|
1金钱
请问下是我配置问题吗?初始化可以,就是进不去中断,发数据接收不到,我用的是max13487芯片进行485通讯。
void UART4_485_Init(u32 baud)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE); //使能串口1(485)时钟
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; // 485控制输入输出
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOC, &GPIO_InitStructure);
// GPIO_ResetBits(GPIOF, GPIO_Pin_11); //默认为接受模式
//
// NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQChannel; //使能串口 2 中断
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //先占优先级 2 级
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //从优先级 2 级
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
// NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化 NVIC 寄存器
NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// 使能UART5中断
USART_InitStructure.USART_BaudRate = baud; //设定传输速率
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); //初始化串口4
USART_ITConfig(UART4, USART_IT_IDLE,ENABLE); //使能串口4接收中断
USART_Cmd(UART4, ENABLE); //使能串口4
USART_ClearFlag(UART4, USART_FLAG_TC);
USART_Init(USART1, &USART_InitStructure);
}
void UART4_Send_Data(u8 *buf,u8 len)
{
for(u8 i=0;i < len; i++) //循环发送数据
{
while(USART_GetFlagStatus(UART4, USART_FLAG_TXE) == RESET);
USART_SendData(UART4,buf[i]);
}
}
void UART4_IRQHandler(void)
{
while(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)
{
//数据存入环型缓冲区
UART4_RX_buf[UART4_Rec_len++] = USART_ReceiveData(UART4);
}
}
|
|