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

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

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

( g5 s* G6 }) ` 1569662-20190906064204631-233725391.png 5 w- z3 c$ G6 s$ y8 T0 h

: T+ l% n, X5 n" k: G2 \
如上图所示,发送(1所示的路线)前,STM32的淳口需要初始化的设置。包括:波特率,字长,硬件流,停止位,奇偶校验位,模式(接收,发送,接收和发送),串口的基地址(Instance)。在初始化串口的函数里面,需要调用到HAL_UART_MspInit(),这是一个虚函数(_weak),HAL_UART_MspInit()会调用到HAL_GPIO_Init(),把IO口进行配置。(模式,上下拉,速度,复用)
! T+ i( `+ a$ ^- K+ }1 T5 g# D
3.接收中断优先级的配置
  1. HAL_NVIC_EnableIRQ(USART1_IRQn);          //接收中断使能          5 p6 `/ u: q) |% l" n  |
  2. HAL_NVIC_SetPriority(USART1_IRQn,2,2);    // 中断优先级的配置
复制代码
9 b$ h# _: N  Z! P
以上两个函数可以放在HAL_UART_MspInit()里面进行
( M! E( [; v( [( ?+ `
+ j: L. h# e5 [4 I6 ^3 h
4.使能串口接收中断
HAL_UART_Receive_IT(&usart1_handler,rdula,1);1 Y+ [7 E* X9 V! \3 N
+ h" s5 U8 G, y7 ]! U) D- b
这个函数可以写在主函数里面,因为在uart.c的文件中是有的。同时可以写在串口配置函数的后面。

' t7 _# ]7 c* c$ Z/ q. v& l* y5.编写中断服务函数/ E4 D+ ~* a+ t+ c9 `8 l
  1. /***中断服务函数***// j8 ~" N0 w$ \! y1 Q4 P* H
  2. void USART1_IRQHandler()
    8 w9 i8 U( L# m
  3. {% w8 t' T, O7 [) c
  4.     HAL_UART_IRQHandler(&usart1_handler);      //中断处理函数   HAL_UART_Receive_IT(&usart1_handler,rdula,1);//使能接收中断。为什么放在这里,因为是处理完中断处理函数,而接受中断关闭,不在处理相关的接收数据,为了能够再次接收数据,可以把接收中断函数放在中断服务函数逇里面。
    - x2 e: k/ \: {! {" B  k3 q( w1 ~
  5. - y1 Y# X" L7 s( C# [: }8 l& G
  6. }
复制代码

& @& j/ N1 U) _8 U; U) Q6.编写中断回调函数% M- T* l( R4 X( x0 @/ B
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)) K. m6 g9 Z0 A
  2. {
    / C9 B# o; \4 k6 a9 g
  3.     u8 temp;7 R7 Y" K% j) ~( `- n
  4.     if(huart->Instance == USART1)            //判断是不是串口一,要对串口一进行回调函数。* ~+ v4 j) n9 M. v. A/ h& x, }
  5.     {4 u: u+ i! ~  X  j# Q. q
  6.         temp=*((huart->pRxBuffPtr)-1);
    * T) B1 Y* ^2 l, H3 E2 W
  7.         HAL_UART_Transmit(&usart1_handler,&temp,1,1000);' d2 H+ o& J. c" C" f0 {$ n" \
  8.    
    $ \0 b. t# L6 J+ S: r
  9.     }
    4 q0 ~. F0 `. P' {: \8 r- i
  10.    
    ! n! t- f& H/ `
  11. }
复制代码

+ c+ q% x! p* Z9 U$ r9 J0 t+ g: l
0 Y' Q5 m, l5 c& E4 L. q
上图所示的代码中,void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)是一个虚函数(_weak),所以需要重新定义。其中if是判断这个基地址是不是串口一。
5 Z: W  o# t, r9 ]

- w5 d0 y) H/ v4 ?( ~
赞 收藏 评论0 发布时间:2022-1-27 23:03

举报

0个回答

所属标签

相似技术帖

官网相关资源

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