4.中断与串口【七天物联网智能家居训练营】

本文详细解析了CM3内核中断机制,介绍了NVIC的优先级管理和GPIO中断处理,同时探讨了串行通信基础、全双工通信、同步异步的区别,并提供了串口通信代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是百问网七天物联网智能家居训练营学习笔记,官网链接

1 中断

我们先来看一下什么是中断:
在这里插入图片描述
其实这种就是前后台的程序设计模式。

我们来看下CM3内核都有哪些中断,如下表:
在这里插入图片描述
对于CM3内核的单片来说,其中断由NVIC进行管理,NVIC即嵌套中断向量管理器。

NVIC可以设置优先级,优先级主要分为抢占优先级和子优先级。

对于给定抢占优先级和子优先级的中断来说,按如下方式进行抢占:

  • 抢占优先级高的中断可以中断抢占优先级低的中断。
  • 两个中断的抢占优先级相同,后来中断要等前面的中断处理完。
  • 两个中断的抢占优先级相同,同时产生,子优先级高的先执行。
  • 抢占优先级、子优先级相同,同时产生,由中断向量表默认位置决定。

对于GPIO中断,还有专门的外部中断/事件控制器进行处理:
在这里插入图片描述

2 串口

我们先来看下通信的一些基本知识:

先了解并行通信和串行通信:
在这里插入图片描述
串行同行的好处是所需通信线比较少,但是速度相对较慢;并行通信的话速度会快很多,但是所需的通信线较多。

然后还要了解下全双工、半双工、单工通信:
在这里插入图片描述
我们这里的串口通信就属于全双工通信。

下面再简单看下同步通信和异步通信:
在这里插入图片描述
异步通信的话无须同步时钟,如串口通信;同步通信的话需要专用的时钟线,比如I2C、SPI等。

对于串口点平我们常听到的TTL电平和RS232、RS485电平对比如下:
在这里插入图片描述
TTL电平一般用于板内通信,而RS232、RS485则用在远距离通信。

如下为串口连接方式和串口时序:
在这里插入图片描述

3 代码实现

如下为无须勾选微库就可以使用printf的方式:

/* USER CODE BEGIN 1 */
/*
* 添加如下代码,可不在工程设置中勾选Use MicroLIB
*/
#pragma import(__use_no_semihosting)

struct __FILE
{
	int a;
};

FILE __stdout;
FILE __stdin;

void _sys_exit(int x)
{
}


/*****************************************************
*function: 写字符文件函数
*param1: 输出的字符
*param2: 文件指针
*return: 输出字符的ASCII码
******************************************************/
int fputc(int ch, FILE *f)
{
	HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 10);
	return ch;
}
/*****************************************************
*function: 读字符文件函数
*param1: 文件指针
*return: 读取字符的ASCII码
******************************************************/
int fgetc(FILE *f)
{
	uint8_t ch = 0;
	HAL_UART_Receive(&huart1, (uint8_t*)&ch, 1, 10);
	return (int)ch;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值