打印
[应用相关]

stm32f103串口UART4和UART5怎么配置

[复制链接]
871|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huanghuac|  楼主 | 2019-10-19 23:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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;
    }
}

使用特权

评论回复
沙发
houcs| | 2019-10-20 08:27 | 只看该作者
  //UART-RX-PC11  
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
模式是不是配错了,建议换成复用试试

使用特权

评论回复
板凳
liuzaiy| | 2019-10-20 08:31 | 只看该作者
请教楼主,UART4,UART5的接收问题解决了吗?
我也遇到同样的问题,只能发射,不能接收,连中断都进不去
若已解决,可否指点一下,非常感恩!

使用特权

评论回复
地板
pangb| | 2019-10-20 08:35 | 只看该作者

又没什么特殊,根据串口1,2的例程改下就可以了;

使用特权

评论回复
5
伍戈123| | 2019-10-28 12:00 | 只看该作者
应该是库文件不支持uart4和5直接调用库函数

使用特权

评论回复
6
ayb_ice| | 2019-10-28 13:48 | 只看该作者
用HAL库吧,这库过时了

使用特权

评论回复
7
香水城| | 2019-10-28 17:44 | 只看该作者
1、注意选择正确的启动文件;
2、注意各个外设时钟的开启、管脚的复用的正确配置;
3、尽可能使用STM32CubeMx进行配置,使用STM32Cube库,真的更方便、更有效率;

使用特权

评论回复
8
zhuotuzi| | 2019-10-28 23:49 | 只看该作者
图形化配置吧,

使用特权

评论回复
9
hanzhen654| | 2019-10-29 19:52 | 只看该作者
标准库一样的配置,hal库更简单

使用特权

评论回复
10
labasi| | 2019-11-15 12:48 | 只看该作者
想实现什么功能啊

使用特权

评论回复
11
keaibukelian| | 2019-11-15 12:52 | 只看该作者
用cube不可以生成吗

使用特权

评论回复
12
heimaojingzhang| | 2019-11-15 12:55 | 只看该作者
直接用库函数  不过自己应该先熟悉一下他的寄存器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

772

主题

8473

帖子

6

粉丝