找回密码
 立即注册
楼主: arison

【实验箱已收到】跟陈教授系统学习单片机

[复制链接]

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-10-16 13:12:50 | 显示全部楼层
第17、18课 串行通信

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_SW2
A2H
BAH
S1_S1
EAXFR
S1_S1
-  
-
I2C_S1
-
I2C_S0
SPI_S1
CMPO_S
SPI_S0
S4_S
0
S3_S
-
S2_S
S1_S1/S1_S0 : 串口1功能脚选择位
         RxD  TxD
0  0   P3.0    P3.1
0  1   P3.6    P3.7
1  0   P1.6    P1.7
1  1   P4.3    P4.4
Sn_S: 串口n(2/3/4)功能脚选择位
Sn_S RxD4 TxD4 RxD3 TxD3  RxD2 TxD2
  0     P0.2   P0.3  P0.0   P0.1  P1.0   P1.1
  1     P5.2   P5.3  P5.0   P5.1  P4.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与中断有关。
截图202310161257514068.jpg
1)串口控制寄存器SCON
符号地址B7B6B5B4B3B2B1B0
SCON88HSM0/FESM1SM2RENTB8RB8TIRI
SM0/SM1 : 串口1的工作模式。
TR1/0: 定时器T1/0的运行控制位。该位由软件置位和清零。

回复 支持 反对

使用道具 举报 送花

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-10-17 13:02:24 | 显示全部楼层
续第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  同步移位串行模式
截图202310171257101141.jpg

截图202310171257452093.jpg

注意:需要软件清零。
串口工作模式1:起始位+8位+停止位
截图202310171300135084.jpg

串口工作模式3:起始位+9位+停止位

回复 支持 反对

使用道具 举报 送花

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-10-19 13:08:58 | 显示全部楼层
第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字节的数据。
截图202310191229535104.jpg

截图202310191302564902.jpg

乙机接收数据的流程
截图202310191304547351.jpg

截图202310191308183816.jpg

回复 支持 反对

使用道具 举报 送花

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-10-20 13:33:06 | 显示全部楼层
第19课 多机通信编程距离
主机:发送地址+10个数据信息
从机:接收地址信息,和自身比较,相等则SM2清零,开始接收10个数据


截图202310201223126250.jpg

主机,初始化后步骤:
1).通常设置指针发送一组数据
2).开中断后,设置TB8确定发送地址,等待中断
3).中断:发送发送中断标志,清TB8发送数据信息
4).启动发送,通过修改指针连续发送

截图202310201244528141.jpg


从机,初始化后步骤:
1).通常设置指针发送一组数据
2).开中断后,等待中断
3).中断:清接收中断标志,从串口读取数据信息
4).通过判断BR8的值,连续接收

串口2的使用实例,后期再做!
回复 支持 反对

使用道具 举报 送花

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-10-21 12:44:57 | 显示全部楼层
本帖最后由 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

回复 支持 反对

使用道具 举报 送花

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-10-27 12:49:52 | 显示全部楼层
第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
CFH
SPIF
SSIG

WCOL
SPEN

-
DORD

-
MSTR

-
CPOL

-
CPHA

-
SPR1

-
SPR0

SPI状态寄存器

符号地址B7B6B5B4B3B2B1B0
SPSTAT状态CDHSPIF
WCOL
-
-
---
-
SPIF: SPI中断标志位 发送/完成1字节数据后置1
WCOL:SPI写冲突标志位

截图202310271224497436.jpg

截图202310271225174832.jpg

SPI接口的通信方式
(1)单主机-单从机方式
(2)互为主从方式

(3)单主机-多从机方式

配置SPI
截图202310271246405287.jpg

回复 支持 反对

使用道具 举报 送花

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-10-27 15:47:48 | 显示全部楼层
ari*** 发表于 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显示模块
回复 支持 反对

使用道具 举报 送花

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-10-30 13:03:23 | 显示全部楼层
第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.功耗
模数转换器的结构
截图202310301222442965.jpg

ADC控制寄存器 ADC_CONTR
      B7         |     B6        |     B5      |        B4       |    B3   |   B2   |   B1   |   B0   
ADC_POWER|ADC_START|ADC_FLAG|ADC_EPWMT|ADC_CHS[3:0]
ADC_POWER:建议进入空闲模式/掉电模式前将ADC电源关闭,降低功耗。
                     电源打开后,需要等约1ms,让ADC电源保持温度

ADC_START:写入1开始转换,完成后硬件自动清零

ADC_FLAG:  转换结束,硬件置1,软件清零(建议用查询进行)

ADC_EPWMT: 使能PWM实时触发ADC功能,需要等间隔时间的ADC转换要启动该功能
ADC_CHS[3:0]: 选择通道,I/O口设置为高阻输入模式 建议同时关闭数字输入通道




ADC转换结果寄存器 ADCCFG
B7 | B6 |   B5     |  B4| B3| B2|B1| B0   
             RESFMT| -   |  SPEED[3:0]

RESFMT:ADC结果格式控制位   0:左对齐    1:右对齐

SPEED[3:0]: 设置ADC工作始终频率


ADC时序控制寄存器 ADCTIM
      B7   |   B6  |   B5     |  B4| B3| B2|B1| B0  
CSSETUP|  CSHOLD[1:0]|   SMPDUTY[4:0]

CSSETUP : 通道选择(建立)时间,每次都会选择

                0:占用1个ADC工作时钟(默认值
                1:占用2个ADC工作时钟

CSHOLD[1:0]:采用保持/结束时间

                00:专用1个ADC工作时钟
                01:专用2个ADC工作时钟(默认值

                10:专用3个ADC工作时钟

                01:专用4个ADC工作时钟

SMPDUTY[4:0]:采样时间 (一定不能小于01010B)

             01010:专用11个ADC工作时钟(默认值
             ~11111:专用32个ADC工作时钟      
截图202310301246138019.jpg



ADC扩展配置寄存器 ADCEXCFG
B7 | B6  |   B5     |  B4  | B3|   B2 | B1 |  B0  
             |ADCETRS[1:0]|  - |CVTIMESEL[2:0]

CVTIMESEL[2:0]: ADC自动转换次数选择

      0xx: 转换1次
      100: 转换2次并取平均值

      101: 转换4次并取平均值

      110: 转换8次并取平均值

      111: 转换16次并取平均值


ADC速度计算公式
截图202310301256469574.jpg


ADC编程步骤
1.设置I/O口的工作模式:高阻输入
2.设置ADC内部时序,ADC采样时间建议设置最大值:ADCTIM
3.设置ADC时钟:ADCCFG
4.使能ADC模块:ADC_CONTR
5.启动AD转换
6.取结果
7.清除标志位

实例:NTC测温并显示
测温时,使用12位ADC值,使用对分查找表格来计算,小说点后一位数是线性插补来计算

等待试验箱进行实例测试!
回复 支持 反对

使用道具 举报 送花

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-10-31 20:06:05 | 显示全部楼层
本帖最后由 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[15:0]+1)
(4)同步电路,用于使用外部信号控制定时器以及定时器互联。
(5)多达4个独立通道可以配置成
        输入捕获
        输出比较
        PWM输出(边缘或中间对齐模式)

        六步PWM输出:控制三向无刷电机
        单脉冲模式输出
        PWMA支持4个死区时间可编程的通道上互补输出
(6)刹车输入信号( PWMFLT)可以将定时器输出信号置于复位状态或者个确定状态。
(7)外部触发输入引脚( PWMETI)。
(8) PWMA/PWMB各有8个中断请求源:
        刹车中断(刹车信号输入)
        触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
        COM事件中断????
        输入捕捉/输出比较1~4中断
PWM时基单元
截图202310311949482013.jpg

(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)向上/向下计数模式,

截图202310312005433154.jpg
PWMA模块的结构框图
截图202310312009283596.jpg


回复 支持 反对

使用道具 举报 送花

1

主题

20

回帖

123

积分

注册会员

积分
123
发表于 2023-11-14 08:51:54 | 显示全部楼层
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 通道输出脚选择位

截图202311140848479728.jpg
截图202311140850457545.jpg

截图202311140851497719.jpg

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-6 11:11 , Processed in 0.171534 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表