第12章 STM32F429的HAL库框架设计学习

发布者:Lihua521最新更新时间:2022-05-09 来源: eefocus关键字:STM32F429  HAL库  框架设计 手机看文章 扫描二维码
随时随地手机看文章

12.1 初学者重要提示

学习使用HAL库前,有必要对他们的基本设计框架有所了解,然后深入学习,效果更好。


为了方便调用,HAL库为各种外设基本都配了三套API,查询,中断和DMA。


12.2 HAL库的配置文件

HAL库有一个专门的配置文件叫stm32f4xx_hal_conf.h,这个文件里面有一个很重要的参数,就是HSE_VALUE,大家所设计板子使用的实际晶振大小一定要与这个数值一致。比如V6的外置晶振是8MHz,那么这里就务必配置宏定义为:


#define HSE_VALUE    ((uint32_t)8000000)


完整的代码如下:


1.    /* ########################## Module Selection ############################## */

2.    /**

3.      * @brief This is the list of modules to be used in the HAL driver 

4.      */

5.    #define HAL_MODULE_ENABLED  

6.    #define HAL_ADC_MODULE_ENABLED

7.    #define HAL_CAN_MODULE_ENABLED

8.    #define HAL_HCD_MODULE_ENABLED

9.    

10.    /* 省略未写 */

11.    

12.    /* ########################## HSE/HSI Values adaptation ##################### */

13.    /**

14.      * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.

15.      *        This value is used by the RCC HAL module to compute the system frequency

16.      *        (when HSE is used as system clock source, directly or through the PLL).  

17.      */

18.    #if !defined  (HSE_VALUE) 

19.      #define HSE_VALUE    (8000000U) /*!< Value of the External oscillator in Hz */

20.    #endif /* HSE_VALUE */

21.    

22.    #if !defined  (HSE_STARTUP_TIMEOUT)

23.      #define HSE_STARTUP_TIMEOUT    (100U)   /*!< Time out for HSE start up, in ms */

24.    #endif /* HSE_STARTUP_TIMEOUT */

25.    

26.    /**

27.      * @brief Internal High Speed oscillator (HSI) value.

28.      *        This value is used by the RCC HAL module to compute the system frequency

29.      *        (when HSI is used as system clock source, directly or through the PLL). 

30.      */

31.    #if !defined  (HSI_VALUE)

32.      #define HSI_VALUE    (16000000U) /*!< Value of the Internal oscillator in Hz*/

33.    #endif /* HSI_VALUE */

34.    

35.    /**

36.      * @brief Internal Low Speed oscillator (LSI) value.

37.      */

38.    #if !defined  (LSI_VALUE) 

39.     #define LSI_VALUE  (32000U)    

40.    #endif /* LSI_VALUE */                      /*!< Value of the Internal Low Speed oscillator in Hz

41.                                                 The real value may vary depending on the variations

42.                                                 in voltage and temperature.  */

43.    /**

44.      * @brief External Low Speed oscillator (LSE) value.

45.      */

46.    #if !defined  (LSE_VALUE)

47.     #define LSE_VALUE  (32768U)    /*!< Value of the External Low Speed oscillator in Hz */

48.    #endif /* LSE_VALUE */

49.    

50.    #if !defined  (LSE_STARTUP_TIMEOUT)

51.      #define LSE_STARTUP_TIMEOUT    (5000U)   /*!< Time out for LSE start up, in ms */

52.    #endif /* LSE_STARTUP_TIMEOUT */

53.    

54.    /**

55.      * @brief External clock source for I2S peripheral

56.      *        This value is used by the I2S HAL module to compute the I2S clock source 

57.      *        frequency, this source is inserted directly through I2S_CKIN pad. 

58.      */

59.    #if !defined  (EXTERNAL_CLOCK_VALUE)

60.      #define EXTERNAL_CLOCK_VALUE    (12288000U) /*!< Value of the External oscillator in Hz*/

61.    #endif /* EXTERNAL_CLOCK_VALUE */

62.    

63.    /* Tip: To avoid modifying this file each time you need to use different HSE,

64.       ===  you can define the HSE value in your toolchain compiler preprocessor. */

65.    

66.    /* ########################### System Configuration ######################### */

67.    /**

68.      * @brief This is the HAL system configuration section

69.      */     

70.    #define  VDD_VALUE                    (3300U) /*!< Value of VDD in mv */

71.    #define  TICK_INT_PRIORITY            (0x0FU) /*!< tick interrupt priority */           

72.    #define  USE_RTOS                     0U     

73.    #define  PREFETCH_ENABLE              1U              

74.    #define  INSTRUCTION_CACHE_ENABLE     1U

75.    #define  DATA_CACHE_ENABLE            1U

76.    

77.    #define  USE_HAL_ADC_REGISTER_CALLBACKS         0U /* ADC register callback disabled       */

78.    #define  USE_HAL_CAN_REGISTER_CALLBACKS         0U /* CAN register callback disabled       */

79.    #define  USE_HAL_CEC_REGISTER_CALLBACKS         0U /* CEC register callback disabled       */

80.    /* 省略未写 */

81.    #define  USE_HAL_UART_REGISTER_CALLBACKS        0U /* UART register callback disabled      */

82.    #define  USE_HAL_USART_REGISTER_CALLBACKS       0U /* USART register callback disabled     */

83.    #define  USE_HAL_WWDG_REGISTER_CALLBACKS        0U /* WWDG register callback disabled      */

84.    

85.    /* ########################## Assert Selection ############################## */

86.    /**

87.      * @brief Uncomment the line below to expanse the "assert_param" macro in the 

88.      *        HAL drivers code

89.      */

90.    /* #define USE_FULL_ASSERT    1U */

91.    

92.    /* ################## Ethernet peripheral configuration ##################### */

93.    

94.    /* Section 1 : Ethernet peripheral configuration */

95.    

96.    /* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */

97.    #define MAC_ADDR0   2U

98.    #define MAC_ADDR1   0U

99.    #define MAC_ADDR2   0U

100.    #define MAC_ADDR3   0U

101.    #define MAC_ADDR4   0U

102.    #define MAC_ADDR5   0U

103.    

104.    /* Definition of the Ethernet driver buffers size and count */   

105.    #define ETH_RX_BUF_SIZE                ETH_MAX_PACKET_SIZE /* buffer size for receive               */

106.    #define ETH_TX_BUF_SIZE                ETH_MAX_PACKET_SIZE /* buffer size for transmit              */

107.    #define ETH_RXBUFNB                    (4U)       /* 4 Rx buffers of size ETH_RX_BUF_SIZE  */

108.    #define ETH_TXBUFNB                    (4U)       /* 4 Tx buffers of size ETH_TX_BUF_SIZE  */

109.    

110.    /* Section 2: PHY configuration section */

111.    

112.    /* DP83848 PHY Address*/ 

113.    #define DP83848_PHY_ADDRESS             0x01U

114.    /* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ 

115.    #define PHY_RESET_DELAY                 (0x000000FFU)

116.    /* PHY Configuration delay */

117.    #define PHY_CONFIG_DELAY                (0x00000FFFU)

118.    

119.    #define PHY_READ_TO                     (0x0000FFFFU)

120.    #define PHY_WRITE_TO                    (0x0000FFFFU)

121.    

122.    /* Section 3: Common PHY Registers */

123.    

124.    #define PHY_BCR                         ((uint16_t)0x00)    /*!< Transceiver Basic Control Register   */

125.    #define PHY_BSR                         ((uint16_t)0x01)    /*!< Transceiver Basic Status Register    */

[1] [2] [3]
关键字:STM32F429  HAL库  框架设计 引用地址:第12章 STM32F429的HAL库框架设计学习

上一篇:第13章 STM32F429启动过程详解
下一篇:第11章 STM32F429移植SEGGER的硬件异常分析

推荐阅读最新更新时间:2024-11-11 13:10

STM32HAL库ADC实验(一)——阻塞查询法
实验现象 生成代码: int main(void) { /* USER CODE BEGIN 1 */ uint16_t adcData; float voltage; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BE
[单片机]
STM32<font color='red'>HAL库</font>ADC实验(一)——阻塞查询法
5.HAL库之时钟系统及定时器SYSTICK
1.系统时钟树: LSI:低速内部时钟(RC震荡器),32kHz,提供低功耗时钟,用于看门狗和自动唤醒单元。 LSE:低速外部时钟,外接32.768kHz的石英晶体,可用于RTC。 HSI:高速内部时钟16MHz,RC振荡器,精度不高,可用作系统时钟或PLL输入。 HSE:高速外部时钟4~26MHz,外接石英/陶瓷谐振器或外部时钟源,可用作RTC或PLL或系统时钟。 PLL:锁相环倍频输出,包括主PLLCLK(生成高速系统时钟216MHz和生成USB等的时钟4PLL48CLK,48MHz)和专用PLLI2SR(生成精确时钟,在I2S接口实现高品质音频性能,PLLI2Q用作SAI时钟。
[单片机]
5.<font color='red'>HAL库</font>之时钟系统及定时器SYSTICK
STM32hal库串口中断接收任意字符
cubeMCX设置: 生成工程文件 usart.c /** ****************************************************************************** * @file usart.c * @brief This file provides code for the configuration * of the USART instances. ****************************************************************************** * @attenti
[单片机]
STM32<font color='red'>hal库</font>串口中断接收任意字符
STM32L051的RTC的坑 基于HAL库
条件1:STM32L051K8T6 条件2:HAL库1.10.0 坑:在调用HAL_Get_Date()前必需先调用HAL_Get_Time,否则取出来的时间,会存在延时,即取值错误! 错误示例: 200ms打印一次,输出结果 : 正确示例: 200ms打印一次,输出结果 : 其实在HAL库的HAL_Get_Time()和HAL_Get_Date()函数说明中有说明: 如果粗心没看到的话,容易卡在这里好几天,比如说我。
[单片机]
STM32L051的RTC的坑 基于<font color='red'>HAL库</font>
stm32f429三通道ADC配置
static void Rheostat_ADC_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure;//2.3.4 // ʹÄÜ GPIO ʱÖÓ RCC_AHB1PeriphClockCmd(RHEOSTAT_ADC_GPIO_CLK, ENABLE); // RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); // ÅäÖà IO PA0 GPIO_InitStructure.GPIO_Pin = RHEOSTAT_ADC_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = G
[单片机]
STM32F1系列HAL库配置GPIO
使用CUBEMX配置GPIO 此文以STM32F10FC8T6为例。 1.选择MCU 2.配置SYS 3.配置RCC,选择外部引脚 4. 配置引脚 注: 5.GPIO配置 1、输入模式 2、上下拉输入 IO上下拉配置 l No pull-up and no pull-down,浮空输入,配置为不上拉和下拉 l Pull-up,上拉输入 l Pull-down,下拉输入 3、端口重命名 1、引脚初始的电平 l Low:IO初始化默认输出低电平 l High:IO初始化默认输出高电平 2、输出模式 l Output Open Drain,开漏输出,可以输出低电平
[单片机]
STM32F1系列<font color='red'>HAL库</font>配置GPIO
STM32F429库函数之I2C读取EEPROM
首先,I2C总线由两条线——串行数据(SDA)和串行时钟(SCL),这是同步通信,也是半双工通信,不能同时读写。每个器件都有一个唯一的地址识别,当总线空闲时I2C两条线都是高电平,只有当连接到总线的器件的输出级是漏级开路或者集电极开路,唯一的地址能够被正确的器件应答。因为应答信号为0,即低电平,能够拉低总线,而同时其它器件(除主机外)引脚仍表现出高阻态,即可以开始进行通信。 I2C读写EEPROM的通讯过程—— 起始信号:在SCL为高电平,SDA由高变低,总线被认为处于忙的状态。调用I2C_GenerateSTART(...)产生起始信号,若起始信号成功发送则产生事件5:SB=1(I2C_SR1的0位置1,表示起始位已发送) 发
[单片机]
<font color='red'>STM32F429</font>库函数之I2C读取EEPROM
第30章 STM32F429的系统bootloader之串口IAP固件升级
30.1 初学者重要提示 学习本章节前,务必优先学习第28章。 本章用到的相关软件和文档下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=96573 。 本章节的串口IAP下载软件使用STM32CubeProg,此软件实现了之前的DfuSe,STLINK小软件和Flashloader三合一,并且支持外部EEPROM,NOR Flash,SPI Flash,NAND Flash等烧写,也支持OTA编程。 使用系统bootloader做串口IAP升级时,MicroUSB接口不要接线到电脑端,因为这会导致系统bootloader工作在USB DFU模式,无法再使用串口I
[单片机]
第30章 <font color='red'>STM32F429</font>的系统bootloader之串口IAP固件升级

推荐帖子

zigbee编程求助
求救,为什么会有这个错误,我是按照书上来编的。。。zigbee编程求助你在你这个结构体的定义的typedefstruct后面加个结构体类型名试试。楼主,请注意,你的这个结构体定义里面有两个变量,这个变量的数据类型是否有定义了呢 我是按照书上来编程的,所以我也不知道有没有编译 那就不在知道了,但是书上的东西不一定很全哦。你最好理解清楚了,再写哦。字面意思是你定义重了。你用ctrl+shift+f找一下其他地方,要有你直接#include就可以 嗯,多谢了
大炮的哈哈哈 RF/无线
【Labview 概念】波形图-DAQ
我们使用DAQ进行数据采集时,采集卡得到的数组,每列表示一个通道所采集到的数据,所以用波形图显示时请先用数组转置。【Labview概念】波形图-DAQ你的0回复我已经顶了很多了这几天啊~
安_然 测试/测量
速度围观了---下载中心最受欢迎的AVR学习资源TOP10
下载中心最受欢迎的AVR学习资源TOP10EEWORLD下载中心简直可以称作资料的海洋,学习的宝库!现在下载中心的各种学习资源汗牛充栋!为了更便于大家的了解,同时也为了把更好的子牙UN推荐给大家,使大家在浏览下载中心的资源的时候,能够首先发现最受欢迎的好资源,现在小编准备按照资源分类将每种资源的TOP10给大家整理出来,希望大家能够更好的学习!在这个TOP10系列推荐贴里面,我们不是简单的按照下载排行榜的前10位罗列出来,而是进行了适当的取舍,尽量选
tiankai001 下载中心专版
MSP430程序烧录出现问题
用file:///C:\Users\lenovo\Documents\TencentFiles\2469660760\Image\C2C\Y(YW33LZ$U2{$file:///C:\Users\lenovo\Documents\TencentFiles\2469660760\Image\C2C\Y(YW33LZ$U2{$file:///C:\Users\lenovo\Documents\TencentFiles\2469660760\Image\C2C\Y(YW33LZ$U2{$
史儒鑫 微控制器 MCU
如何使用430单片机做低频信号源?
1.基本要求(1)正弦波信号源①信号频率:20Hz~20kHz;②频率稳定度:优于10-4③非线性失真系数≤3%(2)脉冲波信号源①信号频率:20Hz~20kHz可步进调整,步长5Hz;②上升时间和下降时间:≤1μs③平顶斜降:≤5%④脉冲占空比:2%~98%步进可调,步长2%;(3)上述两个信号源公共要求①在负载为600Ω时,输出信号不小于6Vp-p。②完成5位频率的数字显示。大三的老油条了!刚学的430o(∩_∩)o哈哈!有谁能介绍一个方案?主要是
guosiyuan 微控制器 MCU
敲重点,西门子PLC与不同传感器的接线方式及应用
导语:了解西门子PLC与NPN、PNP传感器的接线方法对于工业自动化控制至关重要。本文将为您详细介绍西门子PLC的特点、NPN和PNP传感器的应用场景,以及如何正确地完成接线操作。一、西门子PLC特点西门子PLC是一种广泛应用于工业自动化控制的设备,具有以下特点:1.稳定性高:西门子PLC采用先进的微处理器技术,能够在恶劣的工作环境下保持稳定运行。2.高精度:西门子PLC的模拟量输入输出模块具有高精度,适用于各种高精度控制需求。3.易操作:西门子PLC的
2020da 工控电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved