|

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 Oif(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# Sunsigned 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 ^+ junsigned 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
+ x' x; p6 a6 v9 q9 [
+ Y9 Z4 Y2 e/ O' w7 M6 l
gruofvyztct64029379018.png
# `, c3 R2 i( q" Y& G0 t
- k V4 X! l! k) C q& g& H2 D! K
uml3zliqefn64029379118.png
|
|