665|9

154

帖子

1

TA的资源

纯净的硅(初级)

楼主
 

【STM32H7S78-DK】④串口收发数据(中断方式) [复制链接]

本篇,我们来到很基础的串口通讯,串口主要常用于程序调试。

 

查看开发板手册得知,ST—Link的虚拟串口,对应UART4(PD0、PD1)

 

 

 

 

 

我们新建一个空白的工程:

 

 

开启UART4(习惯用APPLI),配置好IO口,UART4默认端口不是PD0/PD1,需要在GPIO重新设置。

 

设置好波特率:9600

 

 

开启中断:

 

 

 

然后生成代码:

可以看到main.c中都设置好了参数。

 

 

 

UART串口收发数据,有4种方式:

1.    轮询:阻塞式,比较占用CPU资源

2.    中断:非阻塞式,需要CPU参与,解放CPU

3.    DMA:非阻塞式,无需CPU参与

4.    基于RTOS嵌入式操作系统,高端玩法

 

本例将演示:轮询和中断方式

1. 轮询发送

添加头文件及定义字符串:

#include "stm32h7rsxx_hal_uart.h"
unsigned char UART_BUF[] = "大江东去,浪淘尽,千古风流人物。故垒西边,人道是:三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,雄姿英发。羽扇纶巾,谈笑间、樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。";

 

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MPU Configuration--------------------------------------------------------*/
  MPU_Config();

  /* MCU Configuration--------------------------------------------------------*/

  /* Update SystemCoreClock variable according to RCC registers values. */
  SystemCoreClockUpdate();

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_UART4_Init();
  /* USER CODE BEGIN 2 */


  //HAL_UART_Receive_IT(&huart4, UART_BUF1,sizeof(UART_BUF1));


  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	HAL_Delay(1000);
	HAL_UART_Transmit(&huart4, UART_BUF, sizeof(UART_BUF),100);


  }
  /* USER CODE END 3 */
}

 

 

 

 

在while(1)函数中加入:

HAL_Delay(1000);

HAL_UART_Transmit(&huart4, UART_BUF, sizeof(UART_BUF),100);

 

运行结果:

 

 

2. 中断收发

 

添加头文件及定义字符串(接收到的数据放在这个数组中):

#include "stm32h7rsxx_hal_uart.h"

unsigned char UART_BUF1[45];

 

main.c函数添加接收中断,同时while(1)函数为空白。

 

int main(void)

{



/* USER CODE BEGIN 1 */



/* USER CODE END 1 */



/* MPU Configuration--------------------------------------------------------*/

MPU_Config();



/* MCU Configuration--------------------------------------------------------*/



/* Update SystemCoreClock variable according to RCC registers values. */

SystemCoreClockUpdate();



/* Reset of all peripherals, Initializes the Flash interface and the Systick. */

HAL_Init();



/* USER CODE BEGIN Init */



/* USER CODE END Init */



/* USER CODE BEGIN SysInit */



/* USER CODE END SysInit */



/* Initialize all configured peripherals */

MX_GPIO_Init();

MX_UART4_Init();

/* USER CODE BEGIN 2 */





HAL_UART_Receive_IT(&huart4, UART_BUF1,sizeof(UART_BUF1));





/* USER CODE END 2 */



/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

}

核心是这句:

HAL_UART_Receive_IT(&huart4, UART_BUF1,sizeof(UART_BUF1));

 

stm32h7rsxx_it.c

中添加串口接收中断函数,并将收到的数据发送出去。

 

 

核心代码为:


 

extern uint8_t UART_BUF1[45];

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	HAL_UART_Transmit_IT(&huart4,UART_BUF1,sizeof(UART_BUF1));   //将接收到的数据发送出去

	HAL_UART_Receive_IT(&huart4, UART_BUF1,sizeof(UART_BUF1));   //再次开启接收中断
}

运行结果为:

 

 

 

 

 

本次的分享就到这里。

 

题外话:看到有的坛友在分享STM32H7S78-DK的开发经验时,对每个模块(如GPIO、UART……),深钻寄存器,每个细节都仔仔细细,

深感佩服的同时,发表点不同的看法:

STM32H7S78-DK这么强大的开发板,拥有如此便利的图形化配置界面CubeMX,以及强大的HAL库。

个人认为要想快速学习,高效应用,最好适应CubeMX+HAL的方式,直接钻研寄存器感觉更适用于8位、16位单片机,硬件资源有限,直接操作寄存器效率更高。

而我们的STM32H7S78-DK,这么强大的硬件以及软件配套,必要性就不大了。

600MHz, 64KB Bootflash, 620KB SRAM, with DSP, cache, USB HS PHY, NeoChrom GPU, TFT-LCD. 

 

此帖出自stm32/stm8论坛

最新回复

正在进行电路开发设计中,学习参考借签,不错,感谢分享!   详情 回复 发表于 2024-10-5 17:07
点赞(1) 关注
 

回复
举报

6060

帖子

6

TA的资源

版主

沙发
 

现在的厂商也是不断的想要让使用者跳过底层,多多进行应用开发,不过中断的工程师还是喜欢对寄存器进行更多的了解,主要就是学习上都是这么过来的

此帖出自stm32/stm8论坛

点评

有道理  现在基本上各家MCU都是图形化界面自动配置寄存器了。 比如ST、NXP、Microchip、Renesas等等  详情 回复 发表于 2024-10-2 17:53
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 

回复

154

帖子

1

TA的资源

纯净的硅(初级)

板凳
 
秦天qintian0303 发表于 2024-10-2 11:41 现在的厂商也是不断的想要让使用者跳过底层,多多进行应用开发,不过中断的工程师还是喜欢对寄存器进行更多 ...

有道理 

现在基本上各家MCU都是图形化界面自动配置寄存器了。

比如ST、NXP、Microchip、Renesas等等

此帖出自stm32/stm8论坛

点评

让咱们方便的同时,实际上也是弱化能力,对单一品牌的依赖性会更高  详情 回复 发表于 2024-10-2 20:01
 
 

回复

6060

帖子

6

TA的资源

版主

4
 
cc1989summer 发表于 2024-10-2 17:53 有道理  现在基本上各家MCU都是图形化界面自动配置寄存器了。 比如ST、NXP、Microchip、Renes ...

让咱们方便的同时,实际上也是弱化能力,对单一品牌的依赖性会更高

此帖出自stm32/stm8论坛
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

731

帖子

4

TA的资源

纯净的硅(高级)

5
 

串口通信是嵌入式开发常用的技术,楼主分享的技术非常详细,很有实用价值

此帖出自stm32/stm8论坛

点评

谢谢捧场   详情 回复 发表于 2024-10-2 20:47
 
 
 

回复

154

帖子

1

TA的资源

纯净的硅(初级)

6
 
chejm 发表于 2024-10-2 20:06 串口通信是嵌入式开发常用的技术,楼主分享的技术非常详细,很有实用价值

谢谢捧场 

此帖出自stm32/stm8论坛
 
 
 

回复

24

帖子

0

TA的资源

禁止发言

7
 

谢谢,正在学习单片机开发,好文,希望有所成。

此帖出自stm32/stm8论坛

点评

  多谢支持!  详情 回复 发表于 2024-10-3 09:44
 
 
 

回复

154

帖子

1

TA的资源

纯净的硅(初级)

8
 
zgnasd1950 发表于 2024-10-3 03:27 谢谢,正在学习单片机开发,好文,希望有所成。

  多谢支持!

此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

禁止发言

9
 

正在进行电路开发设计中,学习参考借签,不错,感谢分享!

此帖出自stm32/stm8论坛

点评

 嘿嘿  详情 回复 发表于 2024-10-5 21:03
 
 
 

回复

154

帖子

1

TA的资源

纯净的硅(初级)

10
 
zxcvbnm751120 发表于 2024-10-5 17:07 正在进行电路开发设计中,学习参考借签,不错,感谢分享!

 嘿嘿

此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
应用技巧/用68HC908GP32单片机实现EPP增强并口的接口技术

摘要:本文介绍了计算机并口的几种操作模式,给出了实现EPP接口设计的几种方案;着重介绍用Motorola公司的68HC908GP32单片机 ...

常用网络命令

常用网络命令 计算机网络的主要优点是能够实 ...

友善之臂嵌入式浏览器中文支持移植成功

经过本人的改造,友善之臂的qtopia自带的浏览器终于支持中文网页了,也就是,如果能把应用程序再汉化下,就可以应用到开发中。空 ...

谈谈我写书的经历

写书,在一些人看来是一个非常光荣而又伟大的事情;在又一些人看来却是一件赚钱的行当。为了让大家真正认识到写书的痛苦与艰辛, ...

留住身边的美景,2015年春天

本帖最后由 mmmllb 于 2015-4-9 12:28 编辑 不知道说现在是春天是否合适:Sweat:,先这么叫着。 话说最近各路的花都开了,有 ...

【DIY创意LED】参考设计(原理图+PCB)

本帖最后由 dcexpert 于 2020-9-15 17:05 编辑 这次使用了立创EDA进行设计,一个原因是立创EDA是国产免费软件,容易查找器件 ...

AD-DC整流、精密整流

AD-DC整流、精密整流: 1.整流桥、四个二极管整流和运放整流有哪些区别? 2.整流之后,为何把正半周信号丢弃了,并且 ...

直流转换电源电感下的铺铜

本帖最后由 qwqwqw2088 于 2022-7-18 09:08 编辑 对DC/DC 电源的电感底部是否应该铺铜这个问题,常常有意见分歧。 一种认为, ...

【Follow me第二季第1期】 开发环境的搭建-基于CircuitPython

二、开发环境的搭建(基于CircuitPython) 安装或更新CircuitPython 单击上面的链接并下载最新的 UF2 文件这里选择中 ...

MOSFET栅极振荡

那么是不是栅极驱动电流越大越好呢也就是我们的驱动电阻的内阻是不是越小越好这也有可能带来问题我们来对驱动电路进行定量仿真用 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表