1.基本概念
并行通信:数据各位同时传送
串行通信:数据一位一位的传送
(1)异步通信:7个数据位: 起始位0+7位数据+校验+停止位1(中间的空闲位是高电平)
8个数据位: 起始位0+8位数据 +停止位1(中间的空闲位是高电平)
-从低位开始传输
-字符格式:双方约定好
-通信速率:波特率,双方约定
(2)同步通信:通信效率高,线路复杂,适合短距离
按传送方向分类
a)单工模式
b)半双工模式:相当于对讲机,不能同时收发
c)全双工:相当于手机,能同时收发
串行接口 UART:Universal Asynchronous Receiver/Transmitter 通用异步接收器/发送器
2.STC8H8K64U单片机
具有4个采用UART工作方式的全双工串行通信接口(串口1、串口2、串口3、串口4)。
每个串口由2个数据缓冲器、1个移位寄存器、1个串行控制寄存器和一个波特率发生器等组成。每个串口的数据缓冲器由接收缓冲器和发送缓冲器构成,它们在物理上是独立的,既可以接收数据也可以发送数据,还可以同时发送和接收数据。
接收缓冲器只能读出,不能写入,而发送缓冲器则只能写入,不能读出。它们共用个地址号,但在物理上是独立的。
串口1有4种工作模式,其中2种波特率可变,2种固定
串口2/3/4只有2种工作模式,波特率可变
通过设置相关寄存器,串口1、2、3、4的引脚可以进行切换:切换不仅使得布线合理,还可以将一个通信接口分时复用为多个通信接口
串口功能脚切换
符号地址B7B6B5B4B3B2B1B0
P_SW1
P_SW2A2H
BAHS1_S1
EAXFRS1_S1
- -
I2C_S1-
I2C_S0
SPI_S1
CMPO_SSPI_S0
S4_S
0
S3_S
-
S2_S
S1_S1/S1_S0 : 串口1功能脚选择位
RxDTxD
00 P3.0 P3.1
01 P3.6 P3.7
10 P1.6 P1.7
11 P4.3 P4.4
Sn_S: 串口n(2/3/4)功能脚选择位
Sn_S RxD4 TxD4 RxD3 TxD3RxD2 TxD2
0 P0.2 P0.3P0.0 P0.1P1.0 P1.1
1 P5.2 P5.3P5.0 P5.1P4.6 P4.7
3.STC8H8K64U的串行接口寄存器
与串口1相关的寄存器有: SCON、PCON、AUXR、SBUF、TMOD、TH1、TL1、TCON、IE、IP、 SADEN和 SADDR。
与串口2相关的寄存器有: S2CON、S2BUF、TH2、TL2、AUXR、IE2、IP2和AUXR1。
与串口3相关的寄存器有: S3CON、S3BUF。
与串口4相关的寄存器有: S4CON、S4BUF。
其中, 寄存器TMOD、TH1TL1、TH2、TL2和TCON与定时器有关
寄存器IE、IE2、IP和IP2与中断有关。
1)串口控制寄存器SCON
符号地址B7B6B5B4B3B2B1B0
SCON88HSM0/FESM1SM2RENTB8RB8TIRI
SM0/SM1 : 串口1的工作模式。
TR1/0: 定时器T1/0的运行控制位。该位由软件置位和清零。
续第18课
SM0/SM1 : 串口1的工作模式
UART_M0x6 = 1 波特率 SYSclk / 2 |=0波特率 SYSclk / 12
0 1 方式1可变波特率8位数据 用T1或T2作波特率发生器:(T1/2的溢出率)/4 多用于单机通信
1 0 方式2固定波特率9位数据 波特率 = (2^smod/64)* SYSclk
1 1 方式3可变波特率9位数据 与方式1波特率计算方法相同 多用于多机通信
SM2:多机通信控制位 主要用于方式2和方式3
(1)主、从机均初始化为模式2或模式3,置SM2=1,允许中断。
(2)主机置TB8=1,发送要寻址的从机地址。
(3)所有从机均接收主机发送的地址,并进行地址比较。
(4)被寻址的从机确认地址后,置本机SM2=0,此时可向主机返回地址,供主机核对。
(5)核对无误后,主机向被寻址的从机发送命令,通知从机接收或发送数据。
(6)通信只能在主、从机之间进行,两个从机之间的通信需通过主机作中介。
(7)本次通信结東后,主、从机重置SM2=1,主机可再对其他从机寻址。
串口2控制寄存器S2CON
符号地址B7B6B5B4B3B2B1B0
S2CON9AHS2SM0-S2SM2S2RENS2TB8S2RB8S2TIS2RI
S2SM01 : 串口2的工作模式。
0 模式0可变波特率8位数据波特率:(T2的溢出率)/4
1 模式1可变波特率9位数据波特率:(T2的溢出率)/4
串口3/4控制寄存器S2CON
符号地址B7B6B5B4B3B2B1B0
SnCON
SnSM0-SnSM2SnRENSnTB8SnRB8SnTISnRI
S2SM01 : 串口3/4的工作模式。
0 模式0可变波特率8位数据波特率:(T2/Tn的溢出率)/4
1 模式1可变波特率9位数据波特率:(T2/Tn的溢出率)/4
如果串口2/3/4波特率一样,可以是使用T2共享波特率发生器
辅助寄存器AUXR
B5 UART_M0X6: 1--串口1模式0的波特率6倍速 0--不加倍
B0 S1ST2:串口1波特率发生器选择位。0--T1 | 1--T2
数据缓冲器
串口1-4:SBUF/S2BUF/S3BUF/S4BUF
串口的工作模式
1)串口1的工作模式0:0 0同步移位串行模式
注意:需要软件清零。
串口工作模式1:起始位+8位+停止位
串口工作模式3:起始位+9位+停止位
第19课 多机通信1
一般采用中断方式进行串行通信,也可以采用DMA方式
(1)串口1编程要点
1)设置串口1的工作模式:SCON的SM0和SM1,REN=1才具有接收功能
2)设置正确的波特率:
--使用T1:设定工作模式和时间常数,启动T1(TR1=1)
--使用T2:设置T2寄存器和相应的位,启动T2(TR2=1)
3)设置串行口1的优先级,设置相应的中断控制位(ES\EA)
4)如要串口1发送,将数据送入SBUF
5)中断服务程序,将TI和RI清零
(2)串口2编程要点
1)设置串口2的工作模式:S2CON的SM20,S2REN=1才具有接收功能
2)设置正确的波特率:设置T2寄存器和相应的位:TH2/TL2/T2_C/T2x12,启动T2(TR2=1)
3)设置串行口2的优先级,设置相应的中断控制位(ES2\EA)
4)如要串口2发送,将数据送入S2BUF
5)中断服务程序,将S2TI和S2RI清零
例:设有甲、乙两台单片机,编写程序,使两台单片机间实现如下串行通信功能。(假设系统时钟为11.0592MHz)。
甲机发送:将首址为 ADDRI的128字节的外部RAM数据块顺序向乙机发送;
乙机接收:将接收的128字节的数据。
乙机接收数据的流程
第19课 多机通信编程距离
主机:发送地址+10个数据信息
从机:接收地址信息,和自身比较,相等则SM2清零,开始接收10个数据
主机,初始化后步骤:
1).通常设置指针发送一组数据
2).开中断后,设置TB8确定发送地址,等待中断
3).中断:发送发送中断标志,清TB8发送数据信息
4).启动发送,通过修改指针连续发送
从机,初始化后步骤:
1).通常设置指针发送一组数据
2).开中断后,等待中断
3).中断:清接收中断标志,从串口读取数据信息
4).通过判断BR8的值,连续接收
串口2的使用实例,后期再做!
本帖最后由 arison 于 2023-10-21 12:45 编辑
MODBUS协议
应用层报文传输协议一问一答协议 和硬件无关
两种传输模式:ASCII模式和RTU模式,常用RTU模式
RTU模式:16进制传输,连续传输,从低位开始
1起始+8位数据+奇偶校验位(可有可无)+停止位
一帧数据后 + 3.5个字符时间空闲 +下一帧
RTU帧:通过波特率可以计算出空闲时间
写多寄存器:
数据功能: 地址功能码寄存地址寄存器个数写入字节数写入数据 校验
偏移字节:0 1 2 3 4 5 6 7~ CRC16
字节数量: 1byte 1byte 2byte 2byte 1byte 2*n byte 2byte
01 10 0100 0004 08 124564890ABCDEF CE12
偏移0:此字节为从机设备地址,用于指定本次接收处理的从机地址,取值为0x000xT。从机设备地址是唯一的。
一般0x00用于广播(比如发送同步帧),从机不返回信息。上例从机设备地址为0x01
偏移1:此字节为功能码,表明本次命令的操作功能,(这个可以查询 MODBUS支持的各种功能),上例的功能码0x10就是“写多寄存器”。
偏移2:此2字节为要写入的寄存器首地址0x0100, MODBUS协议对数据的都是基于寄存器访问的,每个寄存器2个字节(一个WORD)。高字节在前,低字节在后。
偏移4:此2字节为要写入的寄存器个数,0x0004表示要写入4个寄存器。
偏移6:此字节为要写入的字节数,0x08表示要写入8个字节(4个寄存器)。
偏移7:此8个字节为要写入的数据。
最后两个字节:CRC16校验值0x12CE,低字节在前,高字节在后(算法与电脑通用,小端模式)。
各个从机接收到信息后,有多种方式去判断是否是自己的数据,一般习惯先校验,校验通过才做数据解析,然后做出应答。
如果校验通过,从机地址正确,则机一定要做应答(即使是错误的命令)。
上述命令从机返回:
数据功能: 地址功能码寄存地址寄存器个数CRC16
偏移字节:0 1 2 3 4 5 6 7
字节数量: 1byte 1byte 2byte 2byte 2byte
01 10 0100 0004 C033
偏移0:此字节为从机设备地址,同上述描述。
偏移1:此字节为功能码,同上述描述。
偏移2:此2字节为要写入的寄存器首地址,同上述描述。
偏移4:此2字节为已经写入的寄存器个数,0x0004表示已经写入4个寄存器。
最后两个字节:CRC16校验值0x33C0,低字节在前,高字节在后(算法与电脑通用,小端模式)。
如果命令解析错误,则从机返回错误帧:(自定义错误码)
数据功能: 地址 错误码 CRC16
偏移字节:0 1 6 7
字节数量: 1byte 1byte 2byte
01 90 404D
第20课 SPI接口结构
SPI:Serial Peripheral Interface 串行外设接口
两种操作模式:主模式和从模式
SPI是一种高速的,全双工,同步的通信总线,由SCK(时钟)、MOSI(主机发送数据)、MISO(主机接收数据)、~SS(片选)4根信号线构成
MOSI( Master Out Slave In,主出从入):主器件的输出和从器件的输入用于主器件到从器件的串行数据传输。
多个从机共享一根MOSI信号线。
在时钟边界的前半周期,主机将数据放在MOSI信号线上,从机在该边界处获取该数据
MISO( Master In Slave Out,主入从出):从器件的输出和主器件的输入用于实现从器件到主器件的数据传输。
一个主机可连接多个从机,主机的MS0信号线会连接到多个从机上,或者说,多个从机共享一根MISO信号线。
当主机与个从机通信时,其他从机应将其MIS0引脚驱动置为高阻状态。
SCLK串行时钟信号
~SS信号:主模式 低电平有效,从机由主机控制
从模式 始终低电平
SPI相关寄存器
符号地址B7B6B5B4B3B2B1B0
SPSTAT状态
SPCTL控制
SPDAT数据CDH
CEH
CFHSPIF
SSIG
WCOL
SPEN
-
DORD
-
MSTR
-
CPOL
-
CPHA
-
SPR1
-
SPR0
SPI状态寄存器
符号地址B7B6B5B4B3B2B1B0
SPSTAT状态CDHSPIF
WCOL
-
-
---
-
SPIF: SPI中断标志位 发送/完成1字节数据后置1
WCOL:SPI写冲突标志位
SPI接口的通信方式
(1)单主机-单从机方式
(2)互为主从方式
(3)单主机-多从机方式
配置SPI
arison 发表于 2023-10-27 12:49
第20课 SPI接口结构
SPI:Serial Peripheral Interface 串行外设接口
第21课
SPI接口的初始化:
①设置与SP接口有关的I/O线工作模式。
②通过SPI控制寄存器SPCTL设置:~SS引脚的控制、SPI使能、数据传送的位顺序、设置为主机或从机、SP时钟枚性、SP时钟相位、SP时钟选择。
③清0寄存器 SPSTAT中的标志位SPTF和WCOL(向这两个标志位写1即可清零)
④开放SPI中断(IE2中的ESPI=1,IE2寄存器不能位寻址)。
⑤并放总中断(E中的EA=1)
唯一需要注意的是,在中断服务程序中需要将标志位SPIF和WCOL清0。因为SPI中断标志不会自动清除。
例,SPI接口连接LCD显示模块
第24-25课 ADC结构与应用
模数转换的性能指标
1.分辨率如:8位A/D分辨率1/256
2.通道
3.基准电压 内外基准和单、双基准
4.转换速率:从启动到转换结束的时间 的倒数
STC8J 12位ADC为800K(12.5us/次)/ 10位ADC为500K
5.采样/保持器
对于高频信号需要采用/保持
6.量程 所能转换的电压范围
7.满刻度误差
8.线性度
9.数字接口的方式,并行和串行
10.模拟信号类型
11.电源电压
12.功耗
模数转换器的结构
ADC控制寄存器 ADC_CONTR
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0
ADC_POWER|ADC_START|ADC_FLAG|ADC_EPWMT|ADC_CHS
ADC_POWER:建议进入空闲模式/掉电模式前将ADC电源关闭,降低功耗。
电源打开后,需要等约1ms,让ADC电源保持温度
ADC_START:写入1开始转换,完成后硬件自动清零
ADC_FLAG:转换结束,硬件置1,软件清零(建议用查询进行)
ADC_EPWMT: 使能PWM实时触发ADC功能,需要等间隔时间的ADC转换要启动该功能
ADC_CHS: 选择通道,I/O口设置为高阻输入模式 建议同时关闭数字输入通道
ADC转换结果寄存器 ADCCFG
B7 | B6 | B5 |B4| B3| B2|B1| B0
RESFMT| - |SPEED
RESFMT:ADC结果格式控制位 0:左对齐 1:右对齐
SPEED: 设置ADC工作始终频率
ADC时序控制寄存器 ADCTIM
B7 | B6| B5 |B4| B3| B2|B1| B0
CSSETUP|CSHOLD| SMPDUTY
CSSETUP : 通道选择(建立)时间,每次都会选择
0:占用1个ADC工作时钟(默认值)
1:占用2个ADC工作时钟
CSHOLD:采用保持/结束时间
00:专用1个ADC工作时钟
01:专用2个ADC工作时钟(默认值)
10:专用3个ADC工作时钟
01:专用4个ADC工作时钟
SMPDUTY:采样时间 (一定不能小于01010B)
01010:专用11个ADC工作时钟(默认值)
~11111:专用32个ADC工作时钟
ADC扩展配置寄存器 ADCEXCFG
B7 | B6| B5 |B4| B3| B2 | B1 |B0
|ADCETRS|- |CVTIMESEL
CVTIMESEL: ADC自动转换次数选择
0xx: 转换1次
100: 转换2次并取平均值
101: 转换4次并取平均值
110: 转换8次并取平均值
111: 转换16次并取平均值
ADC速度计算公式
ADC编程步骤
1.设置I/O口的工作模式:高阻输入
2.设置ADC内部时序,ADC采样时间建议设置最大值:ADCTIM
3.设置ADC时钟:ADCCFG
4.使能ADC模块:ADC_CONTR
5.启动AD转换
6.取结果
7.清除标志位
实例:NTC测温并显示
测温时,使用12位ADC值,使用对分查找表格来计算,小说点后一位数是线性插补来计算
等待试验箱进行实例测试!
本帖最后由 arison 于 2023-10-31 20:10 编辑
第26-27集
PWM模块
PWMA 可以配置成4组带死区控制的互补对称PWM输出 PWM1P/1N PWM2P/2N PWM3P/3N PWM4P/4N
也可以每个通道独立实现PWM输出 使能P端输出PWM1P/2P/3P/4P,使能N端输出NPWM1N/2N/3N/4N
PWMB 可以配置成4路PWM输出
PWM模块的性能
(1)16位向上、向下、向上/下自动装载计数器。 +1/-1的计数器
先读/写高字节,再读/写低字节
(2)允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器。
可以设定重复计数N次
(3)16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值。
16位寄存器(PWMA_PSCR):频率计算公式fCK_CNT = fCK_PSC/(PSCR+1)
(4)同步电路,用于使用外部信号控制定时器以及定时器互联。
(5)多达4个独立通道可以配置成
输入捕获
输出比较
PWM输出(边缘或中间对齐模式)
六步PWM输出:控制三向无刷电机
单脉冲模式输出
PWMA支持4个死区时间可编程的通道上互补输出
(6)刹车输入信号( PWMFLT)可以将定时器输出信号置于复位状态或者个确定状态。
(7)外部触发输入引脚( PWMETI)。
(8) PWMA/PWMB各有8个中断请求源:
刹车中断(刹车信号输入)
触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
COM事件中断????
输入捕捉/输出比较1~4中断
PWM时基单元
(1)自动预装载(PWMA_CR1寄存器的ARPE位为1)
(2)禁止自动预装载(PWMA_CR1寄存器的ARPE位为0)
产生更新事件的条件:
(1)计数器向上或向下溢出。
(2)软件置位了 PWMA EGR寄存器的UG位。
(3)时钟/触发控制器产生了触发事件
16位计数器的读写操作。
先读高字节,低字节会自动缓存。读完高字节可以立即读低字节也可以稍后读
16位自动装载寄存器PWMA_ARR寄存器写操作
必须先写高字节,后写低字节
预分频器
16位寄存器(PWMA_PSCR)可以将计数时钟频率按1到65536之间的任意值分频
PWMA计数方式
(1)向上计数模式,
(2)向下计数模式,
(3)向上/向下计数模式,
PWMA模块的结构框图
1、PWM输出模式的应用步骤
(1)设置与PWM复用的IO口的工作模式。(设置PiM1、PiM0寄存器,若电路设计中设置了上拉电阻,可设置为漏极开路模式)
(2)通道输出脚选择。(设置PWM1x_PS寄存器)
(3)关闭通道。(设置 PWMX CCER1和 PWMX_CCER2寄存器,清零其中的CCxE位。要设置PWM的相关参数,必须先关闭通道)
(4)配置通道模式。(设置 PWMX_CCMR1、PWMX_CCMR2、PWMx_CCMR3和 PWMx_CCMR4寄存器)
(5)配置通道输出使能和极性。(设置 PWMX_CCER1和 PWMX_CCER2寄存器)
(6)设置周期时间。ARRH/ARRL寄存器
(7)使能输出。(设置 PWMx_ENO寄存器)
(8)使能主输出。(设置 PWMx_BKR寄存器中的MOEx位=1)
(9)启动PwM计时器。(设置 PWM_CR1寄存器中的CENx=1)
(10)根据需要调整 PWMx_CCR寄存器的值便可以修改PWM输出的占空比
2.核心代码
P_SW2 |= 0x80;//扩展寄存器(XFR)访问使能
PWMA_PS = 0x02;//PWM 通道输出脚选择位
页:
1
[2]