打印
[STM32F1]

stm32f103串口UART4和UART5怎么配置

[复制链接]
1025|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的例程改下就可以了;

使用特权

评论回复
5
supernan| | 2021-10-10 15:18 | 只看该作者
应该是库文件不支持uart4和5直接调用库函数

使用特权

评论回复
6
jiajs| | 2021-10-10 15:21 | 只看该作者
用HAL库吧,这库过时了

使用特权

评论回复
7
zwll| | 2021-10-10 15:23 | 只看该作者
注意选择正确的启动文件

使用特权

评论回复
8
zwll| | 2021-10-10 15:26 | 只看该作者
注意各个外设时钟的开启、管脚的复用的正确配置

使用特权

评论回复
9
dingy| | 2021-10-10 15:28 | 只看该作者
尽可能使用STM32CubeMx进行配置,使用STM32Cube库,真的更方便、更有效率;

使用特权

评论回复
10
xxrs| | 2021-10-10 15:30 | 只看该作者
图形化配置吧,

使用特权

评论回复
11
chenjunt| | 2021-10-10 15:32 | 只看该作者
标准库一样的配置,hal库更简单

使用特权

评论回复
12
ousj| | 2021-10-10 15:34 | 只看该作者
想实现什么功能啊

使用特权

评论回复
13
huangchui| | 2021-10-10 15:36 | 只看该作者
用cube不可以生成吗

使用特权

评论回复
14
yszong| | 2021-10-10 15:42 | 只看该作者
直接用库函数  不过自己应该先熟悉一下他的寄存器

使用特权

评论回复
15
huanghuac|  楼主 | 2021-10-10 15:45 | 只看该作者

哦,那我就知道怎么回事了,多谢大家

使用特权

评论回复
16
caoenq| | 2021-10-11 08:50 | 只看该作者
dingy 发表于 2021-10-10 15:28
尽可能使用STM32CubeMx进行配置,使用STM32Cube库,真的更方便、更有效率;

cube这个软件用时间长,程序员就废了。

使用特权

评论回复
17
heimaojingzhang| | 2021-11-3 09:50 | 只看该作者
是不是没有开启中断使能啊

使用特权

评论回复
18
木木guainv| | 2021-11-3 09:51 | 只看该作者
那肯定是设置 有问题了

使用特权

评论回复
19
观海| | 2021-11-3 09:52 | 只看该作者
直接用库函数吧

使用特权

评论回复
20
guanjiaer| | 2021-11-3 09:54 | 只看该作者
为什么说用cube不好啊

使用特权

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

本版积分规则

772

主题

8473

帖子

6

粉丝