电子产业一站式赋能平台

PCB联盟网

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

利用STM32CubeMx的串口DMA收发数据

[复制链接]

397

主题

397

帖子

2463

积分

三级会员

Rank: 3Rank: 3

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

3sqeemi5khe6401884741.png

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

    dzxvqvmz0ew6401884841.png

    # T/ ~9 X% R% k6 o  U; ~  U3 M

    uf3nb3kpnak6401884941.png

    uf3nb3kpnak6401884941.png
    ) E/ y0 s9 A) j  H0 i
    2.设置串口1。9 {1 O9 k  z# V' {# G) V

    w5c2imjfwq06401885041.png

    w5c2imjfwq06401885041.png
    # [) u8 ]- b8 n* m
    3.在DMA Setting里点击Add添加USART1_TX,Mode有两种模式,一种是普通模式,使用一次发送语句就发一次,另一种是循环模式,使用一次发送会一直发送。这里发送我选择普通模式,接收选择循环模式。
    0 C' o3 `4 J4 j0 R5 M2 d

    ogvpngancvh6401885142.png

    ogvpngancvh6401885142.png

    ! E9 S8 d4 ?. A4 U1 m: k4.在中断设置里打开串口1的中断。
    0 q/ e# X7 m. I/ |" b4 x' E( p: c, @

    40nm1lfcwct6401885242.png

    40nm1lfcwct6401885242.png

    5 \; J5 U4 c$ h) o! b7 g+ e& [ 5.时钟和文件路径等设置好,然后点生成代码。3 s. V" ^3 e* [; A: k  |' i

    1ub5y4kxxjn6401885342.png

    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

    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

    fhub5iksudi6401885542.png

    $ C* \+ w: S% f) k, G# q
    5 t1 C3 p1 t4 V9 I8 O# |: h

    nxtuhojiud36401885643.png

    nxtuhojiud36401885643.png

    3 ]! Q0 f" R) f; R3 A' f4 A& \
    6 l' t; ^! w  f

    o4s2gxsfaw06401885743.png

    o4s2gxsfaw06401885743.png
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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