[STM32F1] stm32f103串口UART4和UART5怎么配置

[复制链接]
2624|21
 楼主| huanghuac 发表于 2021-10-10 15:06 | 显示全部楼层 |阅读模式
stm32f103vct6的异步串口UART4和UART5,如下配置貌似只能发数据,不能收数据,连UART4_IRQHandler都进不去,求大神指点一二:
void drv_BT_UartInit(void){
        GPIO_InitTypeDef GPIO_InitStructure;  
        USART_InitTypeDef USART_InitStructure;  
         
        /* config USART1 clock */  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);  
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);   
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE); //注意UART4是挂载在APB1总线上的,用           RCC_APB1PeriphClockCmd()函数初始化!  
        
        //configˉUART4-TX-PC10  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
        GPIO_Init(GPIOC, &GPIO_InitStructure);  
        //UART-RX-PC11  
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  
         
        USART_InitStructure.USART_BaudRate = 57600;  
        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;  
         
        NVIC_SetPriority(UART4_IRQn,PRIORITY_UART4);
        NVIC_EnableIRQ(UART4_IRQn);
        
      USART_DeInit(UART4);
      USART_Init(UART4, &USART_InitStructure);
      USART_Cmd(UART4, ENABLE);
      while(( UART4->SR & USART_FLAG_TC) == 0) __nop();
        
      USART_ITConfig(UART4,USART_IT_RXNE,DISABLE);
      hal_Uart_clear(UART4);
      USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);
        
     USART_ClearFlag(UART4,USART_FLAG_TC);
}

注:
void hal_Uart_clear(USART_TypeDef * pUart){
    volatile int val;
        if(pUart->SR & (USART_FLAG_RXNE|USART_FLAG_ORE)){
        val=pUart->DR;
    }else{
            pUart->SR &= ~0x0F;
    }
}
huangchui 发表于 2021-10-10 15:08 | 显示全部楼层
//UART-RX-PC11  
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
模式是不是配错了,建议换成复用试试
liuzaiy 发表于 2021-10-10 15:13 | 显示全部楼层
请教楼主,UART4,UART5的接收问题解决了吗?
我也遇到同样的问题,只能发射,不能接收,连中断都进不去
若已解决,可否指点一下,非常感恩!
pangb 发表于 2021-10-10 15:16 | 显示全部楼层
又没什么特殊,根据串口1,2的例程改下就可以了;
supernan 发表于 2021-10-10 15:18 | 显示全部楼层
应该是库文件不支持uart4和5直接调用库函数
jiajs 发表于 2021-10-10 15:21 | 显示全部楼层
用HAL库吧,这库过时了
zwll 发表于 2021-10-10 15:23 | 显示全部楼层
注意选择正确的启动文件
zwll 发表于 2021-10-10 15:26 | 显示全部楼层
注意各个外设时钟的开启、管脚的复用的正确配置
dingy 发表于 2021-10-10 15:28 | 显示全部楼层
尽可能使用STM32CubeMx进行配置,使用STM32Cube库,真的更方便、更有效率;
xxrs 发表于 2021-10-10 15:30 | 显示全部楼层
图形化配置吧,
chenjunt 发表于 2021-10-10 15:32 | 显示全部楼层
标准库一样的配置,hal库更简单
ousj 发表于 2021-10-10 15:34 | 显示全部楼层
想实现什么功能啊
huangchui 发表于 2021-10-10 15:36 | 显示全部楼层
用cube不可以生成吗
yszong 发表于 2021-10-10 15:42 | 显示全部楼层
直接用库函数  不过自己应该先熟悉一下他的寄存器
 楼主| huanghuac 发表于 2021-10-10 15:45 | 显示全部楼层

哦,那我就知道怎么回事了,多谢大家
caoenq 发表于 2021-10-11 08:50 | 显示全部楼层
dingy 发表于 2021-10-10 15:28
尽可能使用STM32CubeMx进行配置,使用STM32Cube库,真的更方便、更有效率;

cube这个软件用时间长,程序员就废了。
heimaojingzhang 发表于 2021-11-3 09:50 | 显示全部楼层
是不是没有开启中断使能啊
木木guainv 发表于 2021-11-3 09:51 | 显示全部楼层
那肯定是设置 有问题了
观海 发表于 2021-11-3 09:52 | 显示全部楼层
直接用库函数吧
guanjiaer 发表于 2021-11-3 09:54 | 显示全部楼层
为什么说用cube不好啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

772

主题

8473

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部