电子产业一站式赋能平台

PCB联盟网

搜索
查看: 234|回复: 0
收起左侧

HAL库常用函数汇总【不间断更新】

[复制链接]

397

主题

397

帖子

2463

积分

三级会员

Rank: 3Rank: 3

积分
2463
发表于 2023-11-28 21:02:00 | 显示全部楼层 |阅读模式

txsw2i4rcc364029378817.png

txsw2i4rcc364029378817.png
' y1 F8 R* d- _7 J- @3 E7 l: m9 p
) ^' j; w$ M) x0 l

+ a2 r7 {, u7 A1,系统函数9 d. ]$ X7 H& _( Y# |
          8 a$ j2 p8 m' H! o1 \
HAL_Delay( b* {/ _7 S# o% j; L/ g' }/ i
原型:void HAL_Delay(uint32_t Delay);; p  T- x2 h7 U
作用:利用滴答定时器生成的系统延迟函数
% f9 C9 n3 n$ k9 C参数:
8 _. Q2 X" m3 _* K   Delay:延迟时间,单位是ms
5 |% X1 _# O+ ]" u; [# E返回值:无
" Y& S9 T1 Y1 \! I: N示例代码:. o  H9 d0 n+ x8 n7 C) P
  • HAL_Delay(50);//延迟50ms9 }/ Y: z* o( j( h
           * D- j4 B% ?, c' e. P% l) X
    2,GPIO函数3 U0 {; N' Q% @# o  [) I
             
    * p3 s! B9 N) N; C  }) ZHAL_GPIO_WritePin- A( p5 b( f$ h: u
    原型:void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
    . |; B  V4 _) q, `9 ~作用:使得某一个GPIO的Pin的状态变成高电平或者低电平
    4 b% l# r0 b, }/ Z( G+ q! ]& {参数:  
    ! g( U5 X: K6 m: O5 t   GPIOx:引脚选择
    " l& w6 }  n2 I3 r0 \   GPIO_Pin:引脚编号选择6 O. E$ L, z: l/ a9 P- q% a
       PinState:引脚状态设置
    ' b! c. N' I$ p2 a+ h返回值:无# p3 k; ]5 t; O  G: u) z8 V
    示例代码:5 Y8 j' s, d7 Y8 H; Y
  • HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);//设置PB15引脚为高电平HAL_Delay(500);//延时500msHAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);//设置PB15引脚为低电平HAL_Delay(500);//延时500ms
    4 m( |$ F' N% L          + l/ t/ o2 T' B, b' H7 T4 P
    HAL_GPIO_TogglePin
    6 J% v- S$ m' \) r原型:void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);( H4 O( I/ e$ ^% F0 E
    作用:使得某一个GPIO的Pin的状态翻转
    ( D; r/ h$ q& M$ E参数:  
    2 l0 j1 f+ E* r; P* s3 P4 o   GPIOx:引脚选择
    ' |. f6 q3 u5 }4 Z2 a& ]   GPIO_Pin:引脚编号选择    / I8 ?- ?5 Z# `4 Q' X. v: g
    返回值:无4 O5 t) `& h9 P8 V& B6 I9 m7 a
    示例代码:
    : ]0 h6 n! @+ ^
  • HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_15);//设置PB15引脚翻转,如果原先是低电平,现在就是高电平;如果原先是高电平,现在就是低电平。         
    ; _& ]$ ^2 Z+ C; @1 C; s7 V3 UHAL_GPIO_ReadPin
    2 K1 e& C+ ~1 p; t# g: u原型:GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
    4 N9 V! I# d, {* B  y作用:读取某一个GPIO的Pin的状态翻转" @0 Y' ]0 c& b2 ], D
    参数:  * }9 r; r+ y6 v+ V
       GPIOx:引脚选择
    3 ?- @' g' l( F6 ]3 n   GPIO_Pin:引脚编号选择0 O. \" P- o; \9 z
    返回值:某一个GPIO的Pin的状态。
    ( u* d* ]6 b. x6 o/ r   GPIO_PIN_SET:当前状态为高电平8 N9 c. g& _! E$ D' x! a
       GPIO_PIN_RESET:当前状态为低电平. j4 z1 Y; B: g* k, u( C
    示例代码:
    + n) T" t6 L0 O
  • if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)==GPIO_PIN_RESET)//判断PB15为低电平  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);//设置PB14引脚为高电平   
    / I6 P5 v9 |( P  I1 Q" ^) x/ [/ d$ U' n$ w
    3,UART函数
    8 W% y5 z! U! K  s; W4 i- Q          0 a- `, |8 e, {6 X% j. e; c0 j
    printf重定向# P6 D0 T' {; p* [
    原型:int fputc(int c,FILE *stream);
    ! _, y) \) C8 _6 }/ s: v作用:printf重定向- X$ S5 m" [, y! z% r1 I& l! H
    参数:系统参数,无需关心
    : h) l# ~( {3 v, D3 @0 e返回值:系统参数,无需关心( k8 J6 H6 X- }0 Y: L6 V
    示例代码:9 G3 N' J* O6 A
  • int fputc(int c,FILE *stream)//需要引用头文件:stdio.h{  HAL_UART_Transmit(&huart1,(uint8_t *)&c,1,100);//注意,这里重定向是串口1  return c;}
    0 z: O3 C4 y4 N         
    0 a! J: m, W3 S( }6 ]& FHAL_UART_Transmit6 x* P, E0 E! F/ b% W
    原型:HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size,uint32_t Timeout);% m: O) E- z3 V& @
    作用:串口以阻塞式发送数据
      X- r( T8 a; M参数:
    1 {" j2 W6 `1 Q% S& d   huart:串口号选择
    " O, @: U( S: S- I   pData:发送的数据' M- K9 Y2 D* Y' w
       Size:发送数据的长度4 S3 r3 J0 \2 X& L( v2 ^; Z, U
       Timeout:超时时间,代表执行函数时,最多占用串口的时间,单位是毫秒4 ], @: m) {( r0 t% [
    返回值:无
    . I2 P% h6 p+ \: _+ g9 o5 T示例代码:4 {: z3 j5 I. B* G
  • unsigned char str[]={"hello world"};//需要发送的数据HAL_UART_Transmit(&huart1,str,sizeof(str),100);//串口1在100ms以内发送数据
      d2 W4 s  t3 S0 ^, M! @8 s
    ) [3 R( d$ b9 u$ N3 ^2 RHAL_UART_Receive_IT7 `7 X1 z& Q3 g( \5 `2 `) }
    原型:HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size);$ M2 [# F% o# p% O2 z5 v$ J
    作用:串口以中断方式接收数据. d$ |# J- p0 v' R: U
    参数:
      y6 K5 B; x# [3 C0 S   huart:串口号选择  x# |, B- R  n) q
       pData:发送的数据
    4 b$ K4 l/ W/ A1 P   Size:发送数据的长度
    : I2 D0 l- m7 R. q' s( C. }! F返回值:无; ~/ M# r% e7 v
    示例代码:
    , u: d4 E4 l9 R2 u# S
  • unsigned char str[1];//接收数据存放位置HAL_UART_Receive_IT(&huart1,str,1);//串口接收数据          //串口接收完成的中断回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){    if(str[0]==0x80)//判断接收的数据是否为0x80      HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);//翻转PB5电平}      
    5 w( {+ `2 K) q4 LHAL_UART_RxCpltCallback
    / ]( _6 }7 Y! Q/ u% V原型:__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
    * v; C; b* N% K* o3 K2 N; V作用:串口接收完成的中断回调函数
    " l9 l0 `' J+ |4 c8 x7 @参数:系统参数,无需关心
    " I( o1 s( S- q2 E1 P. S' N返回值:无2 p+ c; H$ T& [) }" M* M$ ]% x
    示例代码:
    ; \' q- F9 y6 g' e0 H2 ~0 ^+ j
  • unsigned char str[1];//接收数据存放位置HAL_UART_Receive_IT(&huart1,str,1);//串口接收一个数据          //串口接收完成的中断回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){    if(str[0]==0x80)//判断接收的数据是否为0x80      HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);//翻转PB5电平}         
    " e6 M4 G' a* b3,IIC函数# R8 q8 Q, f7 I3 h/ _4 M
             
      e) B- u6 I2 c( S, bHAL_I2C_Master_Transmit1 t5 D: }+ G* X1 B" r
    原型:HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
      }" R2 N0 _# g3 ?作用:IIC以主机模式发送数据# y/ L" l! G5 O) T2 ~4 s# B$ t5 k
    参数:8 T  k0 C/ P" i' b
       hi2c:IIC编号. [) s! H. }; {/ L; R1 s0 f
       DevAddress:写入的地址9 I2 {6 S$ L: f) R7 P
       pData:写入的数据$ A/ A3 N, u8 @. Y
       Size:写入数据的字节数! }: W' E  e' J! b; v( @% ^9 v
       Timeout 最大传输时间,超过传输时间将自动退出传输函数+ c) p  _/ [" G* n* v( S4 m
    返回值:无5 m3 F; P2 s& h7 T1 p; i& P' s: ?/ S
    示例代码:! O1 c) F# {3 \5 N7 ]
  • uint16_t Address=0x1234;uint8_t TxData[2]={0x11,0x22};          //在100ms以内,使用IIC1,采用主机模式,向地址0x1234写入数据0x11和0x22    HAL_I2C_Master_Transmit(&hi2c1,I2C1_WRITE_ADDRESS,(uint8_t*)TxData,2,100);
    ! V4 M. F+ Y' w* O' m4 u
    4 s  G. `. c4 Q8 y' P) `+ W) ^8 K          " Y3 z  p/ x; o' |# w
    4,SPI函数3 g* B3 E8 q, M% R$ B1 F, C
    4 B, ?3 b3 Y7 s) ~" }
    HAL_SPI_TransmitReceive
    ! D: A& ~: F, q( f+ C* f8 o原型:HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
    ! o% v! y, w, G* n作用:SPI以阻塞模式发送数据并接收返回值! P3 W8 l5 b. @4 n
    参数:
    - }, {6 w4 H% t   hspi:SPI编号
    , P; \3 j( V, W7 p9 n, {7 W   pTxData:写入的数据) X  k" [  S" [, J
       pRxData:读取的数据
    / r6 e  H# y" c$ i   Size:写入数据的字节数
    , n) R+ A, [# q   Timeout:最大传输时间,超过传输时间将自动退出函数5 R8 d- F' J5 X5 n" g& x
    返回值:无+ \! n" W. e" i7 z% O+ d# }
    示例代码:7 h3 q9 l# H6 L
  • uint8_t TxData[2]={0x11,0x22};uint8_t RxData[2];          //在100ms以内,使用SPI1,写入0x11和0x22,并等待接收的返回值HAL_SPI_TransmitReceive(&spi1,(uint8_t*)TxData,(uint8_t*)TxData,2,100);$ l  n5 c5 C+ }4 ^! c" X
    ! @' r& H7 O- x2 _8 Q% f  z
    ==========' N5 W9 }9 A3 Z8 _# G/ I& w+ J
    往期回顾:! i  V9 E+ W6 U! G2 E- L2 {- @
    小白都看得懂的STM32的DMA知识
    ! H2 A+ J% m5 h2 N& vSTM32CubeMX的外部中断的使用
    # n4 F" |8 H* M, |! nADC的低功耗和阻抗问题1 R) c/ z) t" Q/ H  r9 `1 D
    外部中断为什么会误触发?
    2 c  G( D( C( i: [* a7 P# }4 s利用STM32CubeMX解读时钟树
    0 V5 p2 m: g0 D8 t( u==========
    7 v# S: L1 w; x- X  l/ I% e

    c01fujwjyem64029378917.png

    c01fujwjyem64029378917.png
    + x' x; p6 a6 v9 q9 [

    + Y9 Z4 Y2 e/ O' w7 M6 l

    gruofvyztct64029379018.png

    gruofvyztct64029379018.png

    # `, c3 R2 i( q" Y& G0 t
    - k  V4 X! l! k) C  q& g& H2 D! K

    uml3zliqefn64029379118.png

    uml3zliqefn64029379118.png
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表