3sqeemi5khe6401884741.png
: B' S' z* l, ~4 Q: u$ `0 j9 Z: {3 H9 \1 r+ w0 [
一,代码生成按以前的方法设置好时钟和调试方式,这里就不多说了。[/ol]
+ ]: e) b& e; C, ^8 z: B$ N! N7 ~- q* k4 j; {$ v9 G0 v1 O) h& C
dzxvqvmz0ew6401884841.png
# T/ ~9 X% R% k6 o U; ~ U3 M
uf3nb3kpnak6401884941.png
) E/ y0 s9 A) j H0 i
2.设置串口1。9 {1 O9 k z# V' {# G) V
w5c2imjfwq06401885041.png
# [) u8 ]- b8 n* m
3.在DMA Setting里点击Add添加USART1_TX,Mode有两种模式,一种是普通模式,使用一次发送语句就发一次,另一种是循环模式,使用一次发送会一直发送。这里发送我选择普通模式,接收选择循环模式。
0 C' o3 `4 J4 j0 R5 M2 d
ogvpngancvh6401885142.png
! E9 S8 d4 ?. A4 U1 m: k4.在中断设置里打开串口1的中断。
0 q/ e# X7 m. I/ |" b4 x' E( p: c, @
40nm1lfcwct6401885242.png
5 \; J5 U4 c$ h) o! b7 g+ e& [ 5.时钟和文件路径等设置好,然后点生成代码。3 s. V" ^3 e* [; A: k |' i
1ub5y4kxxjn6401885342.png
: ?6 r. {" z: m8 B$ s
( N0 |' }, A' t$ n; Y9 c
二,代码编写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 */
" p: u& W; c1 f/ D, c三,现象:电脑的串口会收到“OK”,然后从电脑发送给芯片任意字符,芯片再发回来。6 W! g7 d+ z W% s
w32ihbuxhv26401885442.png
: S* b; `% c3 Q4 ]- W( }. O
. I9 s; C/ d# K7 k
==========
9 f- l0 m$ t" F+ C; U6 L4 I% E往期回顾:
1 a0 w, e/ {3 J3 \- X7 t2 wSTM32的DMA的五大问题) A( d3 ^% T: K2 [- \) a) d
单片机的各个通信协议的波特率8 N' R8 W+ }# B+ C, g2 k
C语言有哪些预处理操作?
. Y, W" Z- d3 K+ i函数指针的五大作用+ d% a; O' E6 B9 j
卡尔曼滤波的原理和C代码/ u e# ?% V" U
==========; O) \. A1 Q- G. v2 ~3 Y
原文链接:点击阅读原文$ B9 R9 r# y6 m
作者:来来就来
4 e7 I* `9 M, y2 h5 t' |平台:博客园
" R' Y3 M" X$ y9 B: N& ]. m) {7 K. K& ^, D6 L
fhub5iksudi6401885542.png
$ C* \+ w: S% f) k, G# q
5 t1 C3 p1 t4 V9 I8 O# |: h
nxtuhojiud36401885643.png
3 ]! Q0 f" R) f; R3 A' f4 A& \
6 l' t; ^! w f
o4s2gxsfaw06401885743.png
|