CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!
无匹配项 共计114个匹配页面

数据结构

每个外设模块的HAL驱动中均包含外设句柄结构体、初始化结构体以及配置结构体。

此外,为了简化单独使用LL驱动时的参数配置流程,每个外设的LL驱动中也定义了初始化结构体,以便外设进行必要的初始化配置。

外设句柄结构体

HAL驱动采用多实例架构,可允许同一外设模块多个实例的连续执行。在该架构中,最主要的结构体就是外设句柄结构体ppp_handle_t *handle。可用于定义相应外设每个实例的句柄,保存着每个实例的外设配置参数、寄存器结构体指针以及各种运行时变量。

外设句柄的作用主要包括:

  • 多实例支持:每个外设实例均有各自独立的句柄,即每个实例的外设配置参数、运行时变量等均是独立的。
  • API间通信:句柄保存着运行时的共享变量,可实现各个API之间的数据交互。
  • 存储:句柄也可用于存储和管理指定外设驱动的全局变量。

下面以SPI的句柄结构体举例说明:

typedef struct
{
    ssi_regs_t			*p_instance;	/**< SPI registers base address*/
    spi_init_t			init;             /**< SPI communication parameters*/
    uint8_t				*p_tx_buffer;	/**< Pointer to SPI Tx transfer Buffer */
    __IO uint32_t		tx_xfer_size;	/**< SPI Tx Transfer size*/
    __IO uint32_t		tx_xfer_count;	/**< SPI Tx Transfer Counter*/
    uint8_t				*p_rx_buffer;	/**< Pointer to SPI Rx transfer Buffer */
    __IO uint32_t		rx_xfer_size;	/**< SPI Rx Transfer size*/
    __IO uint32_t		rx_xfer_count ;	/**< SPI Rx Transfer Counter*/
    void (*write_fifo)(struct _spi_handle *p_spi); /**< Pointer to SPI Tx transfer 
                                                      FIFO write function */
    void (*read_fifo)(struct _spi_handle *p_spi); /**< Pointer to SPI Rx transfer 
                                                     FIFO read function  */
    dma_handle_t			*p_dmatx;		/**< SPI Tx DMA Handle parameters*/
    dma_handle_t			*p_dmarx;		/**< SPI Rx DMA Handle parameters*/
    __IO hal_lock_t		lock;			/**< Locking object*/
    __IO hal_spi_state_t state;			/**< SPI communication state*/
    __IO uint32_t		error_code;		/**< SPI Error code*/
    uint32_t				timeout;		/**< timeout for the SPI memory access*/
} spi_handle_t;
说明:

被其它模块共用的系统外设(例如:GPIO、SYSTICK、NVIC、PWR等)没有句柄结构体。

初始化结构体

初始化结构体主要用于保存初始化外设的配置参数。

下面以UART的初始化结构体(可对串口的波特率、数据位、停止位、硬件流控、接收超时使能进行设置)举例说明:

typedef struct
{
    uint32_t baud_rate;
    uint32_t data_bits;
    uint32_t stop_bits; 
    uint32_t parity; 
    uint32_t hw_flow_ctrl;
    uint32_t rx_timeout_mode;
} uart_init_t;

配置结构体

配置结构体主要用于配置子模块或者子实例的参数。

下面以PWM中的通道初始化结构体举例说明:

typedef struct
{
 uint8_t duty; /**< Specifies the duty in PWM output mode. This parameter must be a number between 0 ~ 100.*/
 uint8_t drive_polarity; /**< Specifies the drive polarity in PWM output mode.This parameter can be a value of @ref PWM_DRIVEPOLARITY.*/
} pwm_channel_init_t;

扫描关注

打开微信,使用“扫一扫”即可关注。