DIY-ELECTRIC
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Cấu trúc dữ liệu HAL

Go down

Cấu trúc dữ liệu HAL Empty Cấu trúc dữ liệu HAL

Bài gửi by Admin Fri Apr 12, 2019 11:00 pm

mỗi bộ điều khiển HAL gồm các cấu trúc dữ liệu sau:
- Peripheral handle structures : cấu trúc điều khiển ngoại vi
- Initialization and configuration structures: Cấu trúc cấu hình và khởi tạo
- Specific process structures: Cấu trúc xử lý cụ thể
pirat

Admin
Admin

Tổng số bài gửi : 12
Join date : 24/03/2019

https://dientu4u.forumvi.com

Về Đầu Trang Go down

Cấu trúc dữ liệu HAL Empty Re: Cấu trúc dữ liệu HAL

Bài gửi by Admin Mon Apr 15, 2019 11:48 am

1. Cấu trúc điều khiển ngoại vi (Peripheral handle structures)
PPP_HandleTypeDef *handle là cấu trúc chính được thực thi trong HAL driver. Nó sẽ xử lý cấu hình và các thanh ghi, và nhúng các cấu trúc, biến cần thiết để thỏa mãn yêu cầu hoạt động của ngoại vi.
Cấu trúc xử lý ngoại vi thực hiện các mục đích sau:
- Hỗ trợ đa thể hiện(Multi-Instance): Mỗi một thể hiện (instance) của ngoại vi/mô đun có cách điều khiển của riêng nó. Hay nói một cách khác, các thể hiện của các ngoại vi là độc lập nhau.
- Giao tiếp xử lý ngoại vi (Peripheral process intercommunication): cấu trúc điều khiển ngoại vi được sử dụng để quản lý các nguồn tài nguyên dữ liệu được chia sẻ giữa các thủ tục xử lý. ví dụ như con trỏ toàn cục (global poiter) và các DMA.
- Lưu trữ (Storage) : Các cấu trúc điều khiển ngoại vi cũng quản lý các biến toàn cục bên trong một bộ điều khiển HAL nhất định.
ví dụ về cấu trục điều khiển ngoại vi như sau:

Code:

typedef struct
{
 USART_TypeDef       *Instance; /* USART registers base address - địa chỉ cơ sở của các thanh ghi UART  */
 USART_InitTypeDef     Init;       /* Usart communication parameters - Các tham số giao tiếp của UART */
 uint8_t          *pTxBuffPtr;/* Pointer to Usart Tx transfer Buffer - Con trỏ đến bộ đếm phát Tx của UART*/
 uint16_t          TxXferSize; /* Usart Tx Transfer size  - Kích thước truyền     */
 __IO uint16_t       TxXferCount;/* Usart Tx Transfer Counter - Bộ đếm truyền     */
 uint8_t          *pRxBuffPtr;/* Pointer to Usart Rx transfer Buffer- con trỏ đến bộ đệm thu  */
 uint16_t          RxXferSize;  /* Usart Rx Transfer size   - kích thước dữ liệu thu   */
 __IO uint16_t       RxXferCount; /* Usart Rx Transfer Counter - bộ đếm dữ liệu thu     */
 DMA_HandleTypeDef     *hdmatx;   /* Usart Tx DMA Handle parameters - Các tham số xử lý DMA khi UART ở chế độ phát*/
 DMA_HandleTypeDef     *hdmarx;   /* Usart Rx DMA Handle parameters - các tham số DMA ở chế độ UART thu*/
 HAL_LockTypeDef      Lock;     /* Locking object   - khóa đối tượng    */
 __IO HAL_USART_StateTypeDef  State;  /* Usart communication state - trạng thái truyền thông UART     */
 __IO HAL_USART_ErrorTypeDef  ErrorCode;/* USART Error code - Mã lỗi UART        */
 }USART_HandleTypeDef;



Được sửa bởi Admin ngày Mon Apr 15, 2019 3:27 pm; sửa lần 1.

Admin
Admin

Tổng số bài gửi : 12
Join date : 24/03/2019

https://dientu4u.forumvi.com

Về Đầu Trang Go down

Cấu trúc dữ liệu HAL Empty Re: Cấu trúc dữ liệu HAL

Bài gửi by Admin Mon Apr 15, 2019 1:05 pm

flower Đặc tính đa thể hiện (multi Instance) nói lên rằng, các API được sử dụng các ứng dụng đều là re-entrant và tránh việc sử dụng các  biến toàn cục do một thủ tục con có thể bi lỗi re-entran nếu nó phụ thuộc vào biến toàn cục có giá trị không thay đổi nhưng biến này lại bị thay đổi khi thủ tục này được gọi theo phương pháp đệ quy. Vì lý do này, cần phải tuân thủ các qui tắc sau:
- các đoạn mã re-entrant không chứa các dữ liệu không phải là hằng số dạng static hoặc global: các hàm re-entrant có thể làm việc với dữ liệu toàn cục, ví dụ như một thủ tục phục vụ ngắt có thể nhận một thông tin trạng thái phần cứng để làm việc (chẳng hạn như bộ đệm đọc của cổng nối tiếp UART), nó không những là dữ liệu toàn cục, mà còn thay đổi. Tuy nhiên, việc sử dụng điển hình các biến static và dữ liệu toàn cục là không được khuyến cáo, theo nghĩa là chỉ có các lệnh đọc-sửa - ghi mới sử dụng các biến này. và cũng không nên để các quá trình ngắt xảy ra khi thực hiện các lệnh này.
- Reentrant code không làm thay đổi các đoạn mã của nó
flower Khi một ngoại vi có thể quản lý một vài xử lý đồng thời khi sử dụng DMA, thì các cấu trúc điều khiển giao diện DMA cho mỗi xử lý sẽ được đưa vào PPP_HandleTypeDef.
flower không có cấu trúc điều khiển hay đối tượng thể hiện sử dụng cho các ngoại vi hệ thống và chia sẻ. Các ngoại vi liên quan đến ngoại lệ này gồm có:

- GPIO
- SYSTICK
- NVIC
- PWR
- RCC
- FLASH.

Admin
Admin

Tổng số bài gửi : 12
Join date : 24/03/2019

https://dientu4u.forumvi.com

Về Đầu Trang Go down

Cấu trúc dữ liệu HAL Empty Re: Cấu trúc dữ liệu HAL

Bài gửi by Admin Mon Apr 15, 2019 3:36 pm

2. Cấu trúc cấu hình và khởi tạo(  Initialization and configuration )
Code:

typedef struct
{
uint32_t BaudRate;   /*!< This member configures the UART communication baudrate.*/
uint32_t WordLength;  /*!< Specifies the number of data bits transmitted or received
in a frame.*/
uint32_t StopBits;   /*!< Specifies the number of stop bits transmitted.*/
uint32_t Parity;    /*!< Specifies the parity mode. */
 
  DocID025834 Rev 5  41/1838
 
uint32_t Mode;     /*!< Specifies wether the Receive or Transmit mode is enabled or
disabled.*/
uint32_t HwFlowCtl;  /*!< Specifies wether the hardware flow control mode is enabled
or disabled.*/
uint32_t OverSampling; /*!< Specifies wether the Over sampling 8 is enabled or
disabled,
to achieve higher speed (up to fPCLK/8).*/
}UART_InitTypeDef;

Admin
Admin

Tổng số bài gửi : 12
Join date : 24/03/2019

https://dientu4u.forumvi.com

Về Đầu Trang Go down

Cấu trúc dữ liệu HAL Empty Re: Cấu trúc dữ liệu HAL

Bài gửi by Admin Mon Apr 15, 2019 3:55 pm

Các quy tắc:
quy tắc đặt tên
Cấu trúc dữ liệu HAL Untitl10

- PPP : tham chiếu đến chức năng của ngoại vi chứ không phải tham chiếu đến ngoại vi. Ví dụ với UART thì PPP có thể là  USART, IRDA, UART hoặc SMARTCARD.
các hằng số được sử dụng trong 1 file được định nghĩa trong file đó. Một hằng số được dùng trong 1 số file được định nghĩa trong 1 file header. Tất cả các hăng số được viết bằng ký tự in hoa, ngoại trừ các tham số của hàm điều khiển ngoại vi.
- các thanh ghi được xem là các hằng số, tên của chúng là chữ in hoa
- tên hàm ngoại vi được thêm tiền tố HAL.
- cấu trúc chứa các tham số khởi tạo ngoại vi được đặt tên là PPP_InitTypeDef (ví dụ như  ADC_InitTypeDef).
- Cấu trúc chứa các tham số cấu hình riêng cho ngoại vi PPP được đặt tên là PPP_xxxxConfTypeDef (ví dụ ADC_ChannelConfTypeDef).
- cấu trúc điều khiển ngoại vi  PPP_HandleTypedef
- Các hàm được sử dụng để khởi tạo ngoại vi thông qua các tham số chỉ tra trong cấu trúc  PPP_InitTypeDef được đặt tên là HAL_PPP_Init( ví dụ như HAL_TIM_Init()).
- các hàm được sử dụng để reset các thanh ghi ngoại vi PPP về giá trị mặc định của chúng được đặt tên là PPP_Deinit (ví dụ như TIM_DeInit).

Admin
Admin

Tổng số bài gửi : 12
Join date : 24/03/2019

https://dientu4u.forumvi.com

Về Đầu Trang Go down

Cấu trúc dữ liệu HAL Empty Re: Cấu trúc dữ liệu HAL

Bài gửi by Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết