搜索
bottom↓
回复: 21

STM32F407的串口UART4,UART5为什么只能发送不能接收

[复制链接]

出0入90汤圆

发表于 2018-8-27 12:10:15 | 显示全部楼层 |阅读模式
最近做一个项目,需要使用STM32F407的所有串口。USART1,2,3,6都很正常的可以收发了。但是uart4,uart5就是只能发送,不能接收。
DEBUG发现,根本进不了接收中断。
本来有一丝丝怀疑硬件问题的,但是uart4,uart5现象很同意,硬件查过也没有问题。
所以,想问一下各位,有没有用过STM32F407的UART4,UART5,对此有没有什么特别注意的地方。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-8-27 12:21:10 | 显示全部楼层
首先确认引脚有没有复用正确,再者就是检查下中断优先级了

出0入0汤圆

发表于 2018-8-27 12:30:06 | 显示全部楼层
找找bug手册,好像是有个串口bug

出20入12汤圆

发表于 2018-8-27 13:00:13 | 显示全部楼层
UART4_IRQHandler,UART5_IRQHandler 确认是这么写的? 带S没:USART4_IRQHandler,USART5_IRQHandler?

出0入0汤圆

发表于 2018-8-27 13:06:24 | 显示全部楼层
记得这两个串口没啥特别的。不行的话用轮训的方式试试硬件是否有问题。UART和 USART的还是有些区别的。很长时间以前用过,当时好像心里一阵骂: 为啥不搞成一样的。要么都带S,要么都不带。

出0入0汤圆

发表于 2018-8-27 13:31:12 | 显示全部楼层
static void NVIC4_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

void Initial_UART4(u32 baudrate)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        /* ʹÄÜ UART4 Ä£¿éµÄʱÖÓ  Ê¹ÄÜ UART4¶ÔÓ¦µÄÒý½Å¶Ë¿ÚPCµÄʱÖÓ*/
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC ,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);

           /* ÅäÖÃUART4 µÄ·¢ËÍÒý½Å
         ÅäÖÃPC10 Ϊ¸´ÓÃÊä³ö  Ë¢ÐÂƵÂÊ50MHz
          */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  // ¸´ÓÃÍÆÍìÊä³ö
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
          GPIO_Init(GPIOC, &GPIO_InitStructure);   
          /*
          ÅäÖÃUART4 µÄ½ÓÊÕÒý½Å
          ÅäÖÃPC11Ϊ¸¡µØÊäÈë
         */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
          GPIO_Init(GPIOC, &GPIO_InitStructure);

        GPIO_PinAFConfig(GPIOC,GPIO_PinSource10,GPIO_AF_UART4);
    GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_UART4);
       
        USART_DeInit(UART4);  
        /*
          UART4µÄÅäÖÃ:
          1.²¨ÌØÂÊΪµ÷ÓóÌÐòÖ¸¶¨µÄÊäÈë baudrate;
          2. 8λÊý¾Ý                          USART_WordLength_8b;
          3.Ò»¸öֹͣλ                          USART_StopBits_1;
          4. ÎÞÆæżЧÑé                          USART_Parity_No ;
          5.²»Ê¹ÓÃÓ²¼þÁ÷¿ØÖÆ          USART_HardwareFlowControl_None;
          6.ʹÄÜ·¢ËͺͽÓÊÕ¹¦ÄÜ          USART_Mode_Rx | USART_Mode_Tx;
         */
        USART_InitStructure.USART_BaudRate = baudrate;
        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;
        //Ó¦ÓÃÅäÖõ½UART
        USART_Init(UART4, &USART_InitStructure);
        USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);        //ʹÄܽÓÊÕÖжÏ
        //Æô¶¯UART
    USART_Cmd(UART4, ENABLE);

        NVIC4_Configuration(); //ÅäÖÃÖжÏÓÅÏȼ¶
}

出870入263汤圆

发表于 2018-8-27 12:10:16 | 显示全部楼层
楼主注意一下4楼的提醒,可能性很大

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-8-27 13:47:11 | 显示全部楼层
对,注意中断函数的名字。我之前犯过这样的错误

出0入90汤圆

 楼主| 发表于 2018-8-27 17:42:47 | 显示全部楼层
多谢楼上的诸位回复。可惜这种函数名的基本问题,我是肯定不会犯这种错误的,这个地方特别注意过。

出0入0汤圆

发表于 2018-8-27 17:46:00 | 显示全部楼层
不贴个代码 瞎猜吗

出0入0汤圆

发表于 2018-8-27 18:21:57 | 显示全部楼层
jiespring 发表于 2018-8-27 12:21
首先确认引脚有没有复用正确,再者就是检查下中断优先级了

我也觉得是管脚复用的问题

出0入0汤圆

发表于 2018-8-27 18:28:40 | 显示全部楼层
实际测试UART4和UART5都是正常收发:stm32f407igt6的板子。

出0入0汤圆

发表于 2018-8-27 18:30:27 | 显示全部楼层
407的串口1-6我经常用,没发现什么问题,至少常规方式的收发肯定是没问题的。

出0入0汤圆

发表于 2018-8-27 18:40:12 | 显示全部楼层
用STM32CubeMX配置下就好了,很方便

出0入90汤圆

 楼主| 发表于 2018-8-27 18:50:28 | 显示全部楼层
好的,看到楼上的几位用的都很正常,那说明应该还是我这边的软件或者硬件的问题。不是芯片BUG就OK,结贴。

出0入36汤圆

发表于 2018-8-28 00:04:34 来自手机 | 显示全部楼层
亽亼 发表于 2018-8-27 18:28
实际测试UART4和UART5都是正常收发:stm32f407igt6的板子。

igt6非常贵呀

出0入90汤圆

 楼主| 发表于 2018-8-28 01:20:50 | 显示全部楼层
使用另外一个核心板测试后,一切正常,看来就是硬件的问题,我被坑了。

出0入0汤圆

发表于 2018-8-28 09:59:14 | 显示全部楼层
打板回来硬件测试,我都是用STM32CubeMX配置工程测测GPIO、UART什么的。快速高效。

出0入0汤圆

发表于 2019-5-23 00:50:16 | 显示全部楼层
看来还是要先查硬件啊!

出0入0汤圆

发表于 2019-5-23 02:07:19 | 显示全部楼层
我的407板子上,串口4和5都用了,TTL方式,不会出楼主的问题
收发都是正常的

出0入0汤圆

发表于 2019-5-23 06:47:20 来自手机 | 显示全部楼层
这几个口都用过没楼主说的事

出0入0汤圆

发表于 2021-4-1 20:36:39 | 显示全部楼层
请问楼主解决了么?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 22:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表