OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4186|回复: 2

H743 LPUART1串口通讯 寄存器配置通讯失败 疑问

[复制链接]

3

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
451
金钱
451
注册时间
2015-3-31
在线时间
194 小时
发表于 2019-1-18 14:06:07 | 显示全部楼层 |阅读模式
100金钱
H743芯片, USART1、2、3、6,UART4、5、7、8,原子的HAL库、寄存器均可以通信,唯独LPUART1串口HAL库使用没有问题,寄存器工程配置后,通讯失败。是不是还有其他寄存器没有配置
可有遇到过此问题的朋友?非常感谢。(工程以原子寄存器例程先测试的USART1,之后修改为LPUART1例程)

void uart_init(u32 pclk2,u32 bound)
{           
        u32        temp;          
        temp=(pclk2*1000000+bound/2)/bound;        //得到USARTDIV@OVER8=0,采用四舍五入计算
        RCC->AHB4ENR|=1<<0;           //使能PORTA口时钟  
        RCC->APB4ENR|=1<<3;          //使能串口LPUART1时钟       
        GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_MID,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出
        GPIO_AF_Set(GPIOA,9,3);        //PA9,AF3
        GPIO_AF_Set(GPIOA,10,3);//PA10,AF3            
        //波特率设置
        LPUART1->BRR=temp;                 //波特率设置@OVER8=0        
        LPUART1->CR1=0;                         //清零CR1寄存器
        LPUART1->CR1|=0<<28;                 //设置M1=0
        LPUART1->CR1|=0<<12;                 //设置M0=0&M1=0,选择8位字长
        LPUART1->CR1|=0<<15;         //设置OVER8=0,16倍过采样
        LPUART1->CR1|=1<<3;          //串口发送使能
#if EN_LPUART1_RX                          //如果使能了接收
        //使能接收中断
        LPUART1->CR1|=1<<2;          //串口接收使能
        LPUART1->CR1|=1<<5;            //接收缓冲区非空中断使能                   
        MY_NVIC_Init(3,3,LPUART1_IRQn,2);//组2,最低优先级
#endif
        LPUART1->CR1|=1<<0;          //串口使能
}

最佳答案

查看完整内容[请看2#楼]

谢谢原子哥,这个问题昨天晚上最后找到了。由于LPUART的波特率计算方法与USART、UART不同,LPUART的波特率在《STM32H7xx参考手册》Table382表中 P1932。在设置LPUART时可以直接将LPUART的波特率设定为需要的十六进制数。波特率的问题是在仿真HAL程序时查看LPUART1的寄存器发现其与寄存器程序仿真时不一致,最后查看参考手册发现的问题。再次表示感谢论坛。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
451
金钱
451
注册时间
2015-3-31
在线时间
194 小时
 楼主| 发表于 2019-1-18 14:06:08 | 显示全部楼层
谢谢原子哥,这个问题昨天晚上最后找到了。由于LPUART的波特率计算方法与USART、UART不同,LPUART的波特率在《STM32H7xx参考手册》Table382表中  P1932。在设置LPUART时可以直接将LPUART的波特率设定为需要的十六进制数。波特率的问题是在仿真HAL程序时查看LPUART1的寄存器发现其与寄存器程序仿真时不一致,最后查看参考手册发现的问题。再次表示感谢论坛。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-1-22 02:17:42 | 显示全部楼层
如果你的库函数已经是可以的了,你其实很好解决。直接仿真到串口初始化函数,然后对比库函数和寄存器,在经过初始化以后,LPUSART1的各个寄存器数据,就知道问题在哪里了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 13:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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