51单片机CPU发展物联网感知层的核心差异和应用

51单片机内核是免费的。单片机工作原理单片机分类51单片机硬件平台普中科技51单片机A2套件。单片机编程一般步骤单片机学习内容:CPU和各种内部外设。熟悉一款单片机其实就是熟悉它的寄存器。单片机越复杂则对应寄存器越多越复杂。ISP:在系统编程。IAP:在应用编程。传统单片机软件开发方式

物联网感知层的主要控制多为单片机。

51 个微控制器内核是免费的。电容式触摸IC(带CPU)、Wifi芯片(ESP8266)、LoRa无线通信IC等专用SoC均使用51核。

开发板选择(普中科技):通过开发板学习需要软硬件的结合。

制作开发板涉及采购、供应链等,单个生产不可靠。

所需的基础:编程和电气基础知识、英语、计算机基础知识、兴趣、时间。

微控制器和嵌入式之间的区别

CPU差异:是否存在MMU,即虚拟地址映射。

操作系统区别:实时操作系统、Linux操作系统。

应用领域的差异:低端和中高端,低性能与中高性能。

单片机是一种低级嵌入式器件,嵌入式是单片机的先进延伸和必然趋势。

微控制器和物联网的区别

物联网的三层架构:

实施自下而上、自上而下的双路径。

微控制器是物联网感知层的核心。

相关概念

单片机的定义:它属于计算机的一类。

组成如下:

框图如下:

中间部分是CPU模块,其他部分对应相应的外围模块。

单片机的ROM和RAM工作原理

单片机频率

外设与内部外设

内部外设:GPIO控制器、串口控制器、中断控制器等

外部外设:目前微控制器中没有集成电路模块。

电路板(PCB板)。

PCB板=基板(绝缘,玻璃纤维)+印刷电路

单层板、双面板、四层板、六层板等,一般在覆铜层顶部刷上一层绝缘油墨,避免与外界氧化或导电。

用途:硬件电路的架构和连接,载体。

硬件和软件

硬件比较吃经验。电路板是一种产品,处于低端。20%

软件偏向于思维和逻辑。该产品是一个代码,属于高端。80%

你需要知道一些硬件才能编程,以软件为主线,学习硬件附加。

硬件

岗位职责:

软件

岗位职责:

初级:协助测试、编写代码和维护

中级:独立工作,对产品负责,调整bug

高级:需求分析、框架设计、团队管理

学习基础知识(知识和能力),找工作,学习和锻炼,中级,高级/改变方向

开发工具

万用表

焊接套件

Keil 软件

MCU分类

51 微控制器由英特尔设计并诞生,C8051 内核,8 位微控制器。

热门:宏晶STC51系列单片机。

趋势:

主频越来越高,内部外设也越来越复杂。

ROM 和 RAM 越来越大。

集成其他模块以形成专用 SOC。 包括通用和专用微控制器。

STC MCU系列特点

1T单片机(高性能51单片机):12MHz分频为1MHz(6个时钟周期,12个时钟周期)。

ISP/IAP支持,系统在线编程/在线编程。方便程序烧录升级,不再需要使用烧录机,直接通过USB口在开发板上进行程序烧录。

51、单片机硬件平台

选择 51 种微控制器:STM89C52、8K ROM、512 字节 RAM

普中科技 51 MCU A2 套件。

外围电路标准C语言和Keil C51 C语言

标准 C 语言独立于各种其他应用程序的编程语言,并且是通用的。

Keil C51 是一种标准 C 语言。

程序开发过程

源代码编写

编译和生成可执行程序

灼烧痛

仿真器和 ISP

仿真器用于代替微控制器进行仿真,这是非常昂贵的。后来升级到调试器。

最小的系统

最小的开销,能够工作。

二进制和 IO 端口

位 (b) 和字节 (byte:一个字节等于 8 位

微控制器的 IO 在物理上由微控制器的引脚表示。

51 MCU软件开发 MCU编程一般步骤

原理图分析

芯片数据手册读取

自来水灯

分析:单片机P2输出高电平时LED熄灭,输出低电平LED亮起。

复制模板项目文件并修改组名

右键单击管理组以输入下图:

确认。

修改项目输出属性:

点亮 LED 的核心代码:

P2=0x00; //将P2端口写满为0,即可点亮8个LED。

使用微控制器向导软件生成此延迟函数:

软件配置如下:

实际延时功能为100ms。

按钮输入

按钮:用于用户与 CPU 交互。

处理方式:轮询(CPU每短时间检查一次按键是否被按下,效率低)、中断(效率高)。

按键连接:独立按键和矩阵键盘

原理图分析

分析:当单片机P3口连接的按键引脚被读取到低电平时,表示按钮已被按下,否则未按下。

检测是否按下 P3.3 按钮,如果按下,LED 灯状态反转。

复制模板项目文件,并使用运行灯实验修改组名:方法。

定时器/计数器

SOC 的内部外设。

计时器是CPU的“闹钟”。

计时器是使用计数实现的。

可以计算外部脉冲的数量。

设置时钟源(内部脉冲源,用于计数的脉冲),定时时间等于脉冲时间*脉冲数。

设置计时器时间(计数次数)。

打开计时器。

设置中断处理程序。

计时器计数时,生成中断,CPU 在收到中断信号后执行中断处理程序。

MCU学习内容:CPU和各种内部外设。

各种内部外设的编程接口是寄存器。

熟悉微控制器就是熟悉其寄存器。

微控制器越复杂,相应的寄存器就越复杂。

MSB:最重要的一点。

LSB:最低有效位,表示二进制数中的最低有效位。

相关寄存器:

每个寄存器及其相关位的详细说明可在数据手册中找到。

使用计时器定时 LED 灯闪烁:

代码编写:

复制模板项目文件,并使用运行灯实验修改组名:方法。

分析:定时为0.5s,CPU在定时器定时期间也可以做主任务,定时时间会产生中断,在中断处理功能中会改变LED灯状态。

在12T模式下,时钟频率为1MHz,时钟周期为1us。最大定时时间为65535(16位定时器),即最大定位时间为65535*1us=65535us=65.535ms。

如果需要 500 毫秒,则重复计时,然后累积。

计算 TH0 和 TL0:(51 个微控制器是加法计数器)。

固定时间为10ms

在12T模式下,外部晶振为11.0592MHz,则实际周期为1/(11.0592MHz/12),即计数一次所消耗的时间。

计数次数为 10 ms/(1/(11.0592 MHz/12))) = 9216,计算使用 9215

TL0 = (65535-9615) % 256 = 0x00;

TH0 = (65535-9615) / 256 = 0xDC;

串行通信

Simplex:同时只能单方面发送或接收

半双工:一方可以同时发送或接收

全双工:同时,一方可以发送和接收

1.简单的工作

数据只单向传输,无法实现双方之间的通信。

栗子:电视、收音机。

二、半双工

数据允许双向传输,但数据只能同时向一个方向传输,这实际上是一个单工开关。

栗子:对讲机。

3.全双工

允许在两个方向上同时传输数据。

栗子:手机电话。

串行通信相关概念:

数据以轮换模式发送,以中断模式接收。

注意:对于串口的四种工作模式,只需要使用工作模式1。 8 位 UART,波特率可变模式。

忽略其他三种工作模式。

查询模式处理串口发送的数据:CPU不知道串口何时完成数据发送,因此CPU需要一直工作在串口上,效率低下。

中断模式:串口发送数据后,硬件会自动标记TI位置1,CPU在收到中断信号后执行相关的中断处理程序。

注意:通常,您可以使用轮询方法发送数据,并使用中断方法接收数据。

复制模板项目文件并修改组名

该软件生成的代码如下:

#include 
void InitUART(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xF4;
    TL1 = TH1;
    PCON = 0x80;
    EA = 1;
    ES = 1;
    TR1 = 1;
}
void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}
void main(void)
{
    InitUART();
}
void UARTInterrupt(void) interrupt 4
{
    if(RI)
    {
        RI = 0;
        //add your code here!
    }
    else
        TI = 0;
}

实际使用的程序:

实验结果:

RS485

STM32调试接口:

JTAG系列

SWG公司

常用调试器:

JLINK公司

STLINK公司

STM32编程:

1.寄存器操作:容易出错,过于注重细节。

2、标准库:提供多种标准外设驱动库。

2. HAL库开发:集成各种第三方库。只需配置它。

存储器和 I/O 编码在同一地址中,这些寄存器的操作方式与存储器相同。

STM32的内存映像

上电复位以初始化 GPIO 和其他状态。

数据总线为 32 位,地址线为 32 位。

逻辑地址(理论上可访问的地址)、实际地址(实际可访问的地址)。

存储器和 I/O 的寻址是统一的,I/O 的操作方式与存储器相同。

内部外设的地址从 0x开始。

参考手册给出了内部外设的内存图像。

STM32的位段操作:地址映射

别名存储:Word(32 位)。

映射

位存储桶存储:位

别名存储和段存储是内存中的两个位置。

位段操作是否有原因?

51 个 MCU 支持位操作。STM32本身不支持位运算,只支持32位、8位、16位运算,所以发明了这个运算。将一个位映射到其他 32 位,操作 32 位等同于操作该位。

别名内存区域大小是位带内存区域大小的 32 倍。

STM32 引导模式

三种启动模式:

ISP:系统中的编程。在微控制器运行期间可以烧毁程序。PC 通过串行端口直接将 bin/hex 文件发送到微控制器闪存。

IAP:应用内编程。在线升级功能。自己更新自己。

电源管理系统(PWR)。

CPU 休眠状态:CPU 停止,外设运行,唤醒源全部中断。

CPU停止状态:CPU停止、时钟停止、外设停止,只有SRAM和寄存器保持其原始值,唤醒源为外部中断。

待机模式:CPU停止、时钟停止、外设停止、SRAM和寄存器停止,相当于断电,只有备用电路和备用寄存器工作,唤醒源为IWDG中断等。

复位和时钟

在系统启动开始时,使用内部时钟,并在完成一些初始化后打开外部时钟。

上电复位:执行复位中断功能。

时钟源:时钟产生源,纯内部,内部外部,纯外部

PLL:锁相环电路,功能为倍频。

时钟通道和流向,分频器

完全独立的多个时钟

完全独立的多个时钟。

当系统通电时,默认时钟关闭。 使用内部时钟。

ISP自动下载:不推荐。

GPIO控制LED原理图分析

分析:总共可以控制2个LED,PF9控制LED0,PF10控制LED1。如果输出低电平,LED 将亮起。

编程思路:配置PF9和PF10作为输出,输出电平可以低点亮LED。

MDK4项目成立

创建项目模板:

选择开发板芯片:

关掉:

该项目已建立并完成:

修改 keil 字体大小:

将编码设置为 UTF8:

启动代码

从 CPU 重置执行的第一条指令是 main 函数开始执行之前的代码。该代码涉及 CPU 架构、CPU 运行时环境、编译器环境等。

不同 CPU 的起始代码不同。

相关寄存器

GPIOF的

地址:

模式寄存器:GPIOF_MODER偏移量:0x00实际地址:0x4002 1400

输出类型寄存器: GPIOF_OTYPER 偏移量: 0x04 实际地址: 0x4002 1404

输出速度寄存器: GPIOF_OSPEEDR 偏移: 0x08 实际地址: 0x4002 1408

输出上拉寄存器:GPIOF_PUPDR偏移:0x0C 实际地址:0x4002 140C

输出数据寄存器:GPIOF_ODR偏移量:0x14物理地址:0x4002 1414

位复位/偏移寄存器:GPIOF_BSRR偏移:0x18物理地址:0x4002 1418

C 语言操作寄存器

ARM 针对内存和 Io 统一寻址。C 通过操纵这些地址来操纵寄存器。

模式寄存器配置

配置 GPIOF9 和 GPIOF10 作为输出模式:

即0X500。

输出上拉寄存器

将 GPIOF9 和 GPIOF10 配置为输出上拉

即0X500。

输出数据寄存器

将 GPIOF9 配置为 GPIOF10 作为高电平输出:

即0X600。

调试器配置

注意:此选项需要删除,否则下载程序后将无法自动重置操作。

下载后,我发现没有任何现象。原因是时钟模块未打开。

时钟驱动器移植

由于时钟模块相对复杂,从0开始容易出现错误,需要注意多个寄存器的细节。因此,对于此类问题,一般采用移植方法。根据其他人的代码进行更改。

这里的选择是忽略这种时钟驱动的写入。

修改项目模板组的名称

获取此板芯片的启动代码:

将以下中文部分复制到项目目录下:

添加到项目结构:

添加头文件包含:

时钟相关寄存器

碾 压 混凝土:

地址: 0x4002 3800

AHB1 外设时钟使能寄存器:AHB1 外设时钟使能寄存器

实际地址为:0x4002 3830

引入标准外设库是一种传统的微控制器软件开发方法

芯片制造商提供数据手册和参考手册、示例代码和开发环境。

微控制器的软件工程师查阅参考手册以开发产品功能。

调试各种外设,但实现产品功能。

外设库是芯片公司提供的示例代码的标准化产品。

创建 SI 项目

标准库文件结构:

CMSIS:与ARM内核相关的东西(CPU本身)。

STM32F4xx_StdPeriph_Driver:与内部外设相关的驱动程序

分析:在学习过程中,一次执行一个模块的代码分析。

使用结构访问内存。结构指针。

碾压混凝土模块分析

.c 文件和 .h 文件都有宏定义。

.c 文件中定义的宏定义仅由 C 文件使用,而不由其他文件使用。.h 文件中定义的宏定义不仅可以在相应的 .c 文件中使用,还可以在其他文件中使用。

断言:用于确定参数是否可用。

HAL 库开发 创建 cubemx 项目

配置页面如下

配置 LED 引脚 GPIOF9 和 GPIOF10:

配置输出模式:

时钟配置:

使用的默认配置是使用内部提供的 16MHz:

现在需要将其配置为使用外部晶体振荡器来产生最大工作频率:

生成的时钟配置:

项目配置:

其他配置仍为默认配置。

生成 MDK 代码

使用 MDK 打开项目:

生成的项目结构如下:

编译项目:

下载: 注意:您只需要按如下方式进行设置。

串口实验

F4 开发板原理图分析:

使用串口 1

生成代码:

配置串口接收中断:

RS485(RS422)通讯

RS232通讯距离不大于15m。

远距离传输要求:

提高电压标准,提供通信线路抗扰度,降低阻抗,并使用差分信号。

串行通信常用的波特率为:9600 和 115200。

RS485的最大通讯距离为1200M,最快通讯速度为10Mps,与距离和速度成反比。

差分信号负逻辑。

可以为更长的距离添加中继。

半双工通信。

RS485仅提供物理层通信能力,不提供数据层协议,需要用户定制,或使用MODBUS协议等标准协议。

CPU本身只会提供UART接口,不提供RS485接口。

用法:UARTàRS485-àUART

RS485是纯硬件实现,软件工程师只需要注意串口,只通过串口发送或接收数据,UART到485和UART到UART对CPU都是透明的。

原理图分析:

连接UART2,PG8用于控制数据的发送和接收。

默认为接收模式。

功能要求:

默认的485芯片是接收功能,每1s发送一个0x88,如果接收到0x55,则返回0x01,如果接收到的数据不0x55,则返回给0x00。

运行结果:

MODBUS协议

它可以基于串行端口(RS232、RS485 和 RS422)和以太网。主要分为三类。它属于应用层接口。

Modbus ASCII (英语)

Modbus TCP/IP

Modbus RTU系统

关键在于编码和解码的过程。

STM32 定时器实验 5 种定时器简介

看门狗计时器 (IWDG)。

它分为独立看门狗和窗口看门狗。它用于防止程序逃跑。

Systick 计时器:在操作系统中用作系统运行的滴答时钟。

可用于生成 RTOS 的系统滴答时钟。

它可以用于裸机程序中的短时间精确延迟函数,这就是HAL函数的延迟函数中使用的。

可用作正常定时器中断功能。

功能强度分类:高级定时器(TIM1-TIM8)>通用定时器(TIM2-TIM5、TIM9-TIM14)>基本定时器(TIM6-TIM7)。

在实践中,通用定时器就足够了。

对于STM32F4计时器,有 14 个计时器。比较复杂,学习思路如下:

首先,学习如何使用基本功能。定时,设置时间,时间到了,就会执行中断服务功能。其他高级功能可以在以后在工作中使用时讨论。

定时器 4 实验

为演示文稿选择通用函数计时器。

定时器时钟频率为 84MHz:

使能定时器4,预交叉系数为4200-1,对应的交叉频率为84MHz/4200=20KHz,自动过载值设置为35,超时周期为1750us。

注意:如果时序为 1750us,则计数数为 1750us/(1/20K)=35

如果时序为 1s,则计数数为 1s/(1/20K)=20000

注意:在实验过程中,发现可以将此位置设置为 false 和 true。

自动生成的代码:

打开定时器中断:MX_TIM4_Init ();

基于STM32CubeMX,端口freeModbusRTU(从站)。

请参阅教程:

为了便于处理,以串口1为例。

打开中断:

以计时器 4 为例进行演示:

使能定时器4,预交叉系数为4200-1,对应的交叉频率为84MHz/4200=20KHz,自动过载值设置为35,超时周期为1750us。

注意:如果时序为 1750us,则计数数为 1750us/(1/20K)-1=35-1=34

打开定时器中断:

配置中断优先级:

配置中断优先级,定时器中断优先级低于串口中断

生成代码:

打开 freeModbus 包的 demo 文件夹,新建一个名为 STM32MB 的文件夹,然后将 BARE 文件夹的所有内容复制到 STM32MB 文件夹,返回 freeModbus 包,复制整个 modbus 文件夹并粘贴到 STM32MB 文件夹中。

将 STM32MB 文件夹移动到 stm32cubeMX 生成的项目目录,如图所示

打开项目,导入STM32MB中的所有头文件,新建一个名为 MB 和 MB_Port 的组,将 STM32MB 文件夹下的 modbus 文件夹中的所有 c 文件和 MB 下根目录下的 demo.c 文件添加,并在MB_Port中添加 STM32MB 文件夹下的 port 文件夹中的所有 c 文件, 如图所示

编译错误:

将 demo 中 main 函数的名称更改为 host:

修改 portserial.c 文件(串口设置)下MB_Port

省略的其他移植程序:

测试:

软件配置:

移植成功:

NodeRed 读取:

FreeRTOS 开发

简介:实时操作系统

中断可以嵌套。

您希望使用什么实时操作系统?

原因如下:多任务处理。

RTOS 能学到什么?

应用开发的核心是任务创建、IPC、内存管理等。

应用程序开发(重点) à 内核开发

Cummx 端口

功能:2 个 LED 以不同的频率闪烁。

CMSIS:ARM Cortex 微控制器软件接口标准。

use preemption:使用抢占。

最大优先级

最小堆栈大小

闲置应该屈服

use_mutexes

use recursive mutexes:使用递归收缩

使用计数信号量:使用计数信号量

队列注册表大小:队列注册表的大小

使用应用程序任务标记:使用应用程序任务标记

启用反向兼容性:启用向后兼容性

使用端口优化任务选择:使用端口优化任务选择

use tickless idle:使用无滴答空闲

内存管理:

使用守护进程任务启动钩子:使用守护进程任务启动钩子

检查堆栈溢出:检查堆栈溢出

生成运行时统计信息:生成运行时统计信息

使用跟踪工具:使用跟踪工具

max coroutine priority:最大协程优先级

中断嵌套行为配置:中断嵌套行为配置

库最低中断优先级:库的最低中断优先级

消息缓冲区长度类型:消息缓冲区的长度

use posix errno:使用 posix 错误号

堆仍然可用

use newlib reentrant:使用 newlib 重入

总共有三个任务:

生成代码:

原始刻度设置:

改 性:

lwip 开发 PING 函数实现

如后所述,您需要启用中断功能。

自动协商:自动协商

双工模式:双工模式

从 mll 中分离 phy:从 mll 中分离 phy

已建立有效链接:建立有效链接

其中,Bits4:2 包含 PHY Speed 掩码和 PHY 双工掩码的掩码

Bits2 代表两种速度:10MB/s 和 100MB/s;PHY速度掩模(0x0004)

Bits4 代表两种工作模式:半双工和全双工、PHY 双工掩码 (0x0010)。

启用 ETH 中断:

注意:对于具有正原子的板,需要重新映射:

请注意 PD3 引脚的设置:

默认配置如下:

此处需要修改配置

freeRTOS 配置

LWIP 配置

生成代码:

在实验过程中发现,静态分配的IP地址在一段时间后会失效。

修改操作:

重新修改了 FreeRTOS 标准:其他配置无需修改。

NVIC公司

嵌套矢量中断控制器

起始代码:帮助我们构建中断向量表。

外部中断实际编程过程:

1)设置时钟并打开相应的GPIO模块时钟。

2) NVIC设置

3) 使能外部中断线触发

4) 准备 ISR 并等待中断程序在 ISR 上执行。

注意:NVIC和jtag调试不属于内部外设,而是属于内部CPU,因此标准库中没有对应模块的库文件。

优先级:包含抢占式优先级和次级优先级,数字越小,优先级越高。

HAL 库中断检测密钥

原理图分析:

实验

采用KEY0和PE4。

设置下降沿触发器:

配置 NVIC 以设置中断优先级:

STM32 CPU使用以下方法确定优先级:

1)先确定抢占优先权,数量越小,优先级越高;

2)如果优先权相同,则判断次级优先权,同样,数量越小,优先级越高

配置使用中断优先级分组规则的NVIC_PriorityGroup_2

根据中断优先级分组规则的NVIC_PriorityGroup_2设置特定的优先级大小

生成代码

首先打开 stm32l4xx_it.c 文件:

打开 stm32l4xx_hal_gpio.c 文件,查看函数的原型:

HAL_GPIO_EXTI_Callback(GPIO_Pin);

此函数称为 EXIT 中断回调函数,用于处理发生的所有 EXIT 中断事件。

还可以在 stm32l4xx_hal_gpio.c 文件中找到该函数的原型:

自行实现 EXIT 中断处理回调函数

放在 gpio.c 的末尾:

编译和下载项目:

请注意,配置为中断检测的引脚的初始状态需要为高电平。否则,实验无效。

单片机

基于嵌入式架构的单片机系统设计的现状与发展趋势

2024-5-1 4:02:23

单片机

覆盆子的功效与作用,你知道吗?

2024-5-1 5:00:52

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索