你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32串口接收数据

[复制链接]
STMCU小助手 发布时间:2022-1-27 23:03
稍微理一下思路,一个数据从电脑发送到STM32,然后在从STM32返回到电脑显示出来。

$ m8 Y. p4 t  W9 r/ A 1569662-20190906064204631-233725391.png 5 L# b) g# j( g

+ J, x9 \  y# y/ M( @9 p
如上图所示,发送(1所示的路线)前,STM32的淳口需要初始化的设置。包括:波特率,字长,硬件流,停止位,奇偶校验位,模式(接收,发送,接收和发送),串口的基地址(Instance)。在初始化串口的函数里面,需要调用到HAL_UART_MspInit(),这是一个虚函数(_weak),HAL_UART_MspInit()会调用到HAL_GPIO_Init(),把IO口进行配置。(模式,上下拉,速度,复用)
& w# T- @$ k! h3 s* v1 \
3.接收中断优先级的配置
  1. HAL_NVIC_EnableIRQ(USART1_IRQn);          //接收中断使能         
    ! I# @& G% Z8 p5 D- |' q
  2. HAL_NVIC_SetPriority(USART1_IRQn,2,2);    // 中断优先级的配置
复制代码
) L' d. L( F! W
以上两个函数可以放在HAL_UART_MspInit()里面进行
, o% x4 t' f1 t- t: R6 L4 U& r
! M$ v( G8 T; U6 o
4.使能串口接收中断
HAL_UART_Receive_IT(&usart1_handler,rdula,1);
+ ?3 e, T6 q- T$ Q" Z9 J+ W+ w; S8 ]6 \, Z- G& u9 U5 e( A
这个函数可以写在主函数里面,因为在uart.c的文件中是有的。同时可以写在串口配置函数的后面。

4 ]' v& a# u) l( w6 j: p5.编写中断服务函数$ I: _' Q5 T- P9 g0 \
  1. /***中断服务函数***/4 K# S* O6 P, F2 k' S
  2. void USART1_IRQHandler()
    * P& Q) B+ `" i, d5 |% N
  3. {5 y/ d, H, e$ v8 _( S7 i
  4.     HAL_UART_IRQHandler(&usart1_handler);      //中断处理函数   HAL_UART_Receive_IT(&usart1_handler,rdula,1);//使能接收中断。为什么放在这里,因为是处理完中断处理函数,而接受中断关闭,不在处理相关的接收数据,为了能够再次接收数据,可以把接收中断函数放在中断服务函数逇里面。) t, e( \: w% D( H

  5. ; {6 H6 _" ?" n2 t; ?
  6. }
复制代码
, P* V; x1 Y$ |6 }
6.编写中断回调函数
: ^* l2 F" t5 Q9 x7 k" U
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    . h8 g0 ^; F9 k6 R8 @4 L2 b
  2. {
    9 L. I& b( X7 l8 i
  3.     u8 temp;
    1 h, e( z$ r; a! W4 ]) F6 L
  4.     if(huart->Instance == USART1)            //判断是不是串口一,要对串口一进行回调函数。+ I2 L: l' l: ?  g2 ~/ `
  5.     {
    / h" M' c' y9 W5 g( s) R1 M
  6.         temp=*((huart->pRxBuffPtr)-1);) @# \+ B. G- o
  7.         HAL_UART_Transmit(&usart1_handler,&temp,1,1000);
    $ t* x  i( E' a/ z
  8.     # b( X6 C2 P5 D) V
  9.     }7 a# {7 A) X  I+ U; p$ Q9 Q
  10.    
    ( T* [7 v9 p$ `
  11. }
复制代码
. ?# R1 P- z8 j6 W
3 f6 `2 T/ J) V; j5 Q' w0 Y
上图所示的代码中,void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)是一个虚函数(_weak),所以需要重新定义。其中if是判断这个基地址是不是串口一。

& |+ O) U" W( R
! _# S3 y) [( \4 G
赞 收藏 评论0 发布时间:2022-1-27 23:03

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版