第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-22 12:24

stm32 hal库不定长接收数据
使用 IDLE 中断接收,稍微修改了hal库,但是都是在begin end中修改,重新在cube中生成代码不会去掉这部分内容,不见原理,原理部分请参考编程手册,只讲做法。 1.在stm32f4xx_it,c中修改 void USART1_IRQHandler(void) { /* USER CODE BEGIN USART1_IRQn 0 */ uint32_t isrflags = READ_REG(huart1.Instance- SR); uint32_t cr1its = READ_REG(huart1.Instance- CR1); if(((isrflags & USART_SR_IDLE) !=
[单片机]
STM32 HAL库学习系列第10篇---串口空闲中断接收不定长数据
串口重定向配置: 可以直接复制使用 /************************************************* * 函数功能: 重定向c库函数printf到DEBUG_USARTx * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff); return ch; } /** * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx * 输入参数: 无 * 返 回 值: 无 *
[单片机]
基于STM32F429的定时器中断点亮LED的设计
电子时代,硬件在突飞猛进的发展,频率不断上升,目前的STM32系列,Cortex M系列,Cortex-M4的频率已经为:180MHz了,基本上与之前的ARM7/9频率差不多了,还有Cortex-M7,频率更高,出现了BGA封装与SDRAM DDR等。看来处理器越来越大众化了,物联网上的电子设备联网,也越来越普及了,硬件成本不断降低是大势所趋,因此,作为一个电子设计人员,还是要不断的学习掌握更多的技术知识与基础,从而不会被社会很快淘汰。 最近买了一个现成的STM32F429 Discovery 的开发板,想尝试一下较大点的嵌入式操作系统如RTEMS的移植与应用。因为有了STM32F103/107的基础,熟悉了硬件与固件库,ST
[单片机]
基于<font color='red'>STM32F429</font>的定时器中断点亮LED的<font color='red'>设计</font>
FreeRTOS移植,基于STM32 HAL库
一、硬件准备 一个STM32开发板(STM32F429IGT6),及其电源线等; 一个ST-Link下载器及其连接线等。 二、软件准备 FreeRTOS源码(V9.0.0); 一个基于STM32 HAL库的基础例程(跑马灯例程)。 三、移植FreeRTOS 3.1 添加FreeRTOS源码至工程 添加源代码至工程目录,添加至工程分组中,添加相关头文件路径 编译,提示找不到 FreeRTOSConfig.h 3.2 添加 FreeRTOSConfig.h 文件来源:事先参考众多例程中的 FreeRTOSConfig.h 后,总结出来的 编译结果为:2个error。SVC_Handler() 和 PendSV_Handler()
[单片机]
STM32F429HAL库ADCDMA学习笔记
做了一个ADC的程序一直想学习一下DMA的配置,我一直也是不懂DMA到底有什么用处,还是感觉很鸡肋。稍微配置了一下,我是这样理解DMA的。在配置了dma之后我们adc的数据不会再由cpu搬运,我们直接读取我们DMA数据是节省adc时间。直接看配置 void MY_ADC_Init(void) { ADC_ChannelConfTypeDef ADC1_ChanConf; ADC1_Handler.Instance=ADC1; ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; //4分频,ADCCLK=PCLK2/4=90/4=22.5MHZ A
[单片机]
STM32 HAL库DMA串口使用问题集锦
开发小白用stm32开发时遇到的问题记录 1.问题描述:使用HAL_UART_Receive_DMA进行接收时,经常接收不到信息 处理过程: 经查阅资料发现对于DMA串口,每个串口都有其对应的通道,查询后更改串口通道。 由于使用NUCLEO开发板进行调试,调试过程中发现使用的串口未被引到对应的排针上,而是接到板上自带的STLINK的串口上。 串口极其不稳定,有时能收到有时不能收到,但是另外一发送模块确实是发出来了,经打中断发现经常会出现溢出错误,调试了半天都不行,极其苦恼,后灵光一闪,在使用HAL_UART_Receive_DMA函数接收之前利用HAL_UART_Init函数再次对串口进行初始化,之后发现可以接
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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