电子产业一站式赋能平台

PCB联盟网

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

利用STM32CubeMx的串口DMA收发数据

[复制链接]

395

主题

395

帖子

2304

积分

三级会员

Rank: 3Rank: 3

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

3sqeemi5khe6401884741.png

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

    dzxvqvmz0ew6401884841.png
    / q- O0 H% B( ^$ y6 K( h

    uf3nb3kpnak6401884941.png

    uf3nb3kpnak6401884941.png
    * _0 l3 J. [2 \4 d- ~
    2.设置串口1。4 a$ o, `8 ]$ I; |

    w5c2imjfwq06401885041.png

    w5c2imjfwq06401885041.png
    ) f8 q* Q& _  B$ W
    3.在DMA Setting里点击Add添加USART1_TX,Mode有两种模式,一种是普通模式,使用一次发送语句就发一次,另一种是循环模式,使用一次发送会一直发送。这里发送我选择普通模式,接收选择循环模式。
    ' w) g3 \/ E  b/ x' ~+ ?; ~

    ogvpngancvh6401885142.png

    ogvpngancvh6401885142.png

    ) [7 \1 W' L. r# t% R4.在中断设置里打开串口1的中断。; r5 z- n% T! W1 N3 Z2 b; n

    40nm1lfcwct6401885242.png

    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

    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

    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

    fhub5iksudi6401885542.png

      s+ q9 j* L8 p6 q
    ) h  v# q7 \0 Q9 ~

    nxtuhojiud36401885643.png

    nxtuhojiud36401885643.png
    * f! J8 N/ O+ l. Q$ ?2 c8 e& f

    3 L4 s8 |* A' F( w$ H; B+ M

    o4s2gxsfaw06401885743.png

    o4s2gxsfaw06401885743.png
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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