OpenEdv-开源电子网

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

STM32F3 HAL库,该如何学习,刚接触HAL库,不知从何下手

[复制链接]

13

主题

105

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
16874
金钱
16874
注册时间
2012-10-20
在线时间
48 小时
发表于 2016-4-12 15:25:18 | 显示全部楼层 |阅读模式
1金钱
有没研究过HAL库的可以分析一份学习手册,谢谢

最佳答案

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

既然已经学习HAL库,应该不算是入门了。HAL库不需要从头开始学,直接用就行了,需要用什么外设,就到响应的.c文件和.h文件中查看“HAL_”开头的操作函数。 比如GPIO,先看stm32f4xx_hal_gpio.h,找到HAL_GPIO_ReadPin( ),HAL_GPIO_WritePin( )等函数,从函数名称基本上可以指定它的作用了,要了解它的用法,右键然后定位到.c文件中的函数体就可以了。 另外就是HAL库的回调函数机制,就是HAL库几乎对所有的外设相关的中断都定 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2016-4-12 15:25:19 | 显示全部楼层
既然已经学习HAL库,应该不算是入门了。HAL库不需要从头开始学,直接用就行了,需要用什么外设,就到响应的.c文件和.h文件中查看“HAL_”开头的操作函数。

比如GPIO,先看stm32f4xx_hal_gpio.h,找到HAL_GPIO_ReadPin( ),HAL_GPIO_WritePin( )等函数,从函数名称基本上可以指定它的作用了,要了解它的用法,右键然后定位到.c文件中的函数体就可以了。

另外就是HAL库的回调函数机制,就是HAL库几乎对所有的外设相关的中断都定义了相应的以Callback结尾的回调函数。

以我自己的经验,建议结合STM32CubeMX进行开发,因为STM32CubeMX生成的代码使用的就是HAL库。
使用Cube开发,直接生成MDK或者IAR等工程框架,已经添加了所需的源文件和头文件。生成的代码已经具有很好的程序架构。
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-4-12 15:36:33 | 显示全部楼层
先参考ST官方的HAL库例程,多看几遍基本上就差不多了,照着官方的例程自己创建个工程试试
回复

使用道具 举报

13

主题

105

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
16874
金钱
16874
注册时间
2012-10-20
在线时间
48 小时
 楼主| 发表于 2016-4-12 17:43:46 | 显示全部楼层
zuozhongkai 发表于 2016-4-12 15:36
先参考ST官方的HAL库例程,多看几遍基本上就差不多了,照着官方的例程自己创建个工程试试

我是想知道函数和函数参数的作用。比如,串口,配置 如下

  UartHandle.Init.BaudRate   = 9600;
  UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
  UartHandle.Init.StopBits   = UART_STOPBITS_1;
  UartHandle.Init.Parity     = UART_PARITY_NONE;
  UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
  UartHandle.Init.Mode       = UART_MODE_TX_RX;

就会使能串口中断,并且会自动调用回调函数
HAL_UART_TxCpltCallback
回复

使用道具 举报

13

主题

105

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
16874
金钱
16874
注册时间
2012-10-20
在线时间
48 小时
 楼主| 发表于 2016-4-14 09:30:18 | 显示全部楼层
adlu 发表于 2016-4-12 18:51
既然已经学习HAL库,应该不算是入门了。HAL库不需要从头开始学,直接用就行了,需要用什么外设,就到响应的 ...

比如这个串口回调函数“HAL_UART_TxCpltCallback”我一开始以为是只要发送完成一个字节就完成一次回调,但是看了例子程序,应该是发送完全部数据,才回调。但是我单单看这个函数的说明,我不知道是这个功能,需要看例子才知道。感觉起来大体知道是什么。但是就没十足大把握,没有找到响应的说明。所以用起来感觉有点担心。
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2016-4-14 13:14:16 | 显示全部楼层
乐学 发表于 2016-4-14 09:30
比如这个串口回调函数“HAL_UART_TxCpltCallback”我一开始以为是只要发送完成一个字节就完成一次回调, ...

这个是要多看例程。
刚开始的时候是有很多不习惯,掌握规律后,开发起来非常轻松。

像使用UART接收中断的时候,要先调用HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)函数,参数Size设定接收多少个字节之后调用一次回调函,参数pData是接收数据的要存放的数组指针。而且要注意,在调用回调函数之后,接收中断就被禁止了。想要继续使用接收中断功能,就必须要重新调用HAL_UART_Receive_IT()使能。如果要连续接收,最好就是在回调函数中使能。
回复

使用道具 举报

13

主题

105

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
16874
金钱
16874
注册时间
2012-10-20
在线时间
48 小时
 楼主| 发表于 2016-4-14 17:14:20 | 显示全部楼层
adlu 发表于 2016-4-14 13:14
这个是要多看例程。
刚开始的时候是有很多不习惯,掌握规律后,开发起来非常轻松。

所以这些具体的功能和细节,资料基本都没写到,只能看例子和测试了
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-5-15
在线时间
2 小时
发表于 2016-5-18 10:53:49 | 显示全部楼层
顶  帮我也用个
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 08:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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