硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2783|回复: 10
收起左侧

[HAL] STM32H7的HAL库源码bug,函数HAL_LPTIM_Init的LPTIM3初始化有误(搞错了^_^)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2019-1-3 02:00:19 | 显示全部楼层 |阅读模式
QQ截图20190103015923.jpg


感谢坛友指出,HAL库这么操作是没有问题的。

根据寄存器map文件,LPTIM_CFGR2和LPTIM3_CFGR2是在同一个偏移地址。
1.jpg
2.jpg


而LPTIM1 - LPTIM5这五个外设的寄存器的地址不同,实际操作起来并不会有问题,HAL库这里的处理,如果不看参考手册,容易想当然,以为LPTIM_CFGR2和LPTIM3_CFGR2是不同的偏移地址

#define PERIPH_BASE         ((uint32_t)0x40000000)
#define D2_APB2PERIPH_BASE   (PERIPH_BASE + 0x00010000)
#define D3_APB1PERIPH_BASE   (PERIPH_BASE + 0x18000000)

#define LPTIM1_BASE           (D2_APB1PERIPH_BASE + 0x2400)
#define LPTIM2_BASE           (D3_APB1PERIPH_BASE + 0x2400)
#define LPTIM3_BASE           (D3_APB1PERIPH_BASE + 0x2800)
#define LPTIM4_BASE           (D3_APB1PERIPH_BASE + 0x2C00)
#define LPTIM5_BASE           (D3_APB1PERIPH_BASE + 0x3000)


#define LPTIM1              ((LPTIM_TypeDef *) LPTIM1_BASE) <----- 展开这个宏,(TIM_TypeDef *) 0x40012400
#define LPTIM2              ((LPTIM_TypeDef *) LPTIM2_BASE)
#define LPTIM3              ((LPTIM_TypeDef *) LPTIM3_BASE) <----- 展开这个宏,(TIM_TypeDef *) 0x58002800
#define LPTIM4              ((LPTIM_TypeDef *) LPTIM4_BASE)
#define LPTIM5              ((LPTIM_TypeDef *) LPTIM5_BASE)


然后HAL库的寄存器定义里面也比较省事,直接仅定义了CFGR2。

typedef struct
{
  __IO uint32_t ISR;       /*!< LPTIM Interrupt and Status register,         Address offset: 0x00 */
  __IO uint32_t ICR;       /*!< LPTIM Interrupt Clear register,              Address offset: 0x04 */
  __IO uint32_t IER;      /*!< LPTIM Interrupt Enable register,             Address offset: 0x08 */
  __IO uint32_t CFGR;     /*!< LPTIM Configuration register,                Address offset: 0x0C */
  __IO uint32_t CR;       /*!< LPTIM Control register,                      Address offset: 0x10 */
  __IO uint32_t CMP;      /*!< LPTIM Compare register,                      Address offset: 0x14 */
  __IO uint32_t ARR;      /*!< LPTIM Autoreload register,                   Address offset: 0x18 */
  __IO uint32_t CNT;      /*!< LPTIM Counter register,                      Address offset: 0x1C */
  uint16_t  RESERVED1;    /*!< Reserved, 0x20                                                    */
  __IO uint32_t CFGR2;    /*!< LPTIM Option register,                      Address offset: 0x24 */
} LPTIM_TypeDef;

然后下面的操作已经将地址区分开。

LPTIM1 ->CFGR2 对应地址 0x40012400 + 0x24
LPTIM3 ->CFGR2 对应地址 0x58002800 + 0x24



回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2019-1-3 08:55:52 | 显示全部楼层
事实上,LPTIM模块目前并没有CFGR3寄存器。
回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2019-1-3 08:58:00 | 显示全部楼层
结合手册pdf和头文件来看,库没有错。
回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2019-1-3 08:59:12 | 显示全部楼层
经验得出:保证睡眠时间,就能降低出错率。
回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2019-1-3 09:03:21 | 显示全部楼层
2019-01-03_090008.png 2019-01-03_090057.png

回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
发表于 2019-1-3 09:19:52 | 显示全部楼层
公仆 发表于 2019-1-3 08:59
经验得出:保证睡眠时间,就能降低出错率。

大佬要多多休息啊。
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2019-1-3 09:27:05 | 显示全部楼层
哈哈
回复

使用道具 举报

14

主题

207

回帖

254

积分

高级会员

积分
254
发表于 2019-1-3 10:02:48 | 显示全部楼层
这届坛友有技术还皮
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
 楼主| 发表于 2019-1-3 10:03:42 | 显示全部楼层
回复

使用道具 举报

2

主题

87

回帖

93

积分

初级会员

积分
93
发表于 2019-1-3 10:31:53 | 显示全部楼层
真是厉害,研究的深入
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2019-1-3 11:24:08 | 显示全部楼层
这样好 本来记不住,这样一来就记住了。   
希望eric能把h7嚼碎了慢慢喂给我。。。。不想再换平台了。。希望h7能再用10年。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 23:47 , Processed in 0.187239 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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