3sqeemi5khe6401884741.png
+ s f D; D% Y. p+ N. U) m7 v9 A; g# I& D+ p; r% G1 u, g# R
一,代码生成按以前的方法设置好时钟和调试方式,这里就不多说了。[/ol]& u& Q0 f* [3 r6 N+ p$ h+ t. z' D3 B
; d8 S& W' P8 M/ Y& K: G
dzxvqvmz0ew6401884841.png
/ q- O0 H% B( ^$ y6 K( h
uf3nb3kpnak6401884941.png
* _0 l3 J. [2 \4 d- ~
2.设置串口1。4 a$ o, `8 ]$ I; |
w5c2imjfwq06401885041.png
) f8 q* Q& _ B$ W
3.在DMA Setting里点击Add添加USART1_TX,Mode有两种模式,一种是普通模式,使用一次发送语句就发一次,另一种是循环模式,使用一次发送会一直发送。这里发送我选择普通模式,接收选择循环模式。
' w) g3 \/ E b/ x' ~+ ?; ~
ogvpngancvh6401885142.png
) [7 \1 W' L. r# t% R4.在中断设置里打开串口1的中断。; r5 z- n% T! W1 N3 Z2 b; n
40nm1lfcwct6401885242.png
" j) r/ M) v& ^8 `2 f5 Q; H0 _8 D5 G
5.时钟和文件路径等设置好,然后点生成代码。
+ t. E" U. J! a, S; T4 G9 V
1ub5y4kxxjn6401885342.png
; k" h& _, O: M# G2 L
- d; h, C# P3 E5 y% Z二,代码编写1.先定义发送和接收的数组。/* USER CODE BEGIN 0 */uint8_t aRxBuffer[1];uint8_t aTxBuffer[]="ok";/* USER CODE END 0 */2.打开串口DMA的发送使能,while循环可以放一些LED的闪烁。/* USER CODE BEGIN 2 */ HAL_UART_Receive_DMA(&huart1,aRxBuffer,1); HAL_UART_Transmit_DMA(&huart1,aTxBuffer,sizeof(aTxBuffer)); /* USER CODE END 2 */3.最后加上一个串口接收函数的回调函数,把接收到的数据再发出去。/* USER CODE BEGIN 4 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle){ HAL_UART_Transmit(&huart1,aRxBuffer,1,0);}/* USER CODE END 4 */ C) U+ U* P% ^
三,现象:电脑的串口会收到“OK”,然后从电脑发送给芯片任意字符,芯片再发回来。
1 p8 z9 X7 k5 ], p7 U: a: ?
w32ihbuxhv26401885442.png
+ G; ]: \& d4 t
) ~. \/ c7 t7 I6 X" P9 g0 F==========0 t' g/ H$ ^+ F# o5 L5 e @
往期回顾:8 J! `, c, q1 {, n3 { c9 i$ `$ O
STM32的DMA的五大问题% _, S. t e( ~; s) {) \. Q
单片机的各个通信协议的波特率
0 @4 Z/ N! g4 }2 B4 s4 sC语言有哪些预处理操作?" w8 b# ]) Q/ \0 u
函数指针的五大作用( {( g: K% I. G6 e( j
卡尔曼滤波的原理和C代码
* {/ u1 Y; d) K* L1 M' f5 a h% _ L==========2 G8 f$ [! ?+ I' t5 u% l" x1 L& b
原文链接:点击阅读原文
3 W% U, t7 X- @" `作者:来来就来- |, e1 ?1 ?! m! F/ N8 X
平台:博客园
" p1 }- M( y, M5 [; T% E! P7 P7 V r' ?2 u+ @8 D: U
fhub5iksudi6401885542.png
s+ q9 j* L8 p6 q
) h v# q7 \0 Q9 ~
nxtuhojiud36401885643.png
* f! J8 N/ O+ l. Q$ ?2 c8 e& f
3 L4 s8 |* A' F( w$ H; B+ M
o4s2gxsfaw06401885743.png
|