找回密码
 立即注册
楼主: 大亮

《STC教学研讨会STC8H/STC32G》--学习记录/学习心得--打卡帖 | 建议送

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-10-15 14:05:25 | 显示全部楼层
预习  玩转CAN总线   基于STC89C52单片机的开发板学习      STC89C52+SJA1000+TJA1050      支持CAN2.0A (11bit ID)和CAN2.0B(29bit ID)USB-》RS232-》串口-》STC  板子控制成本
目标文件      支持ISP下载的51单片机      独立按键接在P3.2(int0)P3.3(int1)外部中断口    复位按键
SJA1000T CAN控制器 FIFO 并口(P0 : AD0~AD7)      ISP复位模式 RST按钮复位 复位电路(PIN 9 RST)



CAN总线控制芯片 Philips SJA000 64K FIFO  CAN总线驱动器Philips TJA1050 (收发器)     RS232电平转换MAX232


继电器:弱点控制强电功能  CAN-ENDER 120Ω
截图202310141858367939.jpg

靠自己来摸索 版本2 版本4       USB转串口--虚拟串口      
根据注释一条一条的看懂源代码,知道CAN总线开发的全部过程
帧结构:CAN2.0A 略    CAN2.0B扩展帧 29位寻址范围广、网络范围大
SJA1000 CAN 控制器的CAN 通讯波特率由寄存器BTR0、BTR1 晶振等参数共同决定。依据晶振查表,修改代码        波特率计算小软件

case ByteRate_125k  :                      //SJA1000的晶振为必须为16MHZ,波特率设置为125kpbs
               BTR0_num=0x03;
               BTR1_num=0x1c;
截图202310142043039469.jpg

滤波器:直接ID号进行滤波;       寄存器滤波
验收屏蔽寄存器:每一位对应每一位验收代码,改为屏蔽位为1,即无关,都会接收。AMR为0的位所对应的ACR位和参与滤波数据的对应位必须相同才算验收通过。
单滤波配置,一个长滤波器
ACR为1位,接收。    ACR 4个字节 ---29bit
双滤波配置,两个短滤波器
广播、组播、点播,灵活组网
多实践、多交流

独立的控制器芯片;    和微控制器做在一起,如Cortex-M0内核的xxxx微控制器
CAN总线报文格式:帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结尾
帧空间、总线空闲
位定时要求,      同步
位填充:足够多的跳变沿,        比特流编码:NRZ
总线错误类型:位、填充、形式、应答、CRC
错误标志: 检测到错误的站,发送错误标志,错误主动的节点、主动错误标志
故障界定:错误主动、错误被动、总线关闭   ERROR COUNTER              错误计数规则
总线拓扑结构:      中继器:      网桥:      集线器:       网关:(协议转换)      传输介质:双绞线,光纤      斜率控制:      介质接入仲裁,      
网络延时,      通讯速率   速率一致性  晶振频率,BTR1,BTR0    SJA1000的控制通过访问其内部寄存器来实现,不同操作模式的内部寄存器分分布不同,数据手册,对单片机SJA000似外部RAM器件:片选SJA1000,操作内部寄存器地址对其进行读、写操作控制
代码:头文件SJA1000.h中定义SJA1000相关特殊功能寄存器 #define SJA1000_BASE 0X7E00      unsigned char xdata CONTROL _at_ SJA1000_BASE+0X00;...
unsigned char xdata TxBuffer1 _at_ SJA1000_BASE+0X0A;...unsigned char xdata RxBuffer1 _at_ SJA1000_BASE+0X14;...unsigned char xdata *SJA1000_Address;
CAN通信基本函数 bit enter_RST (void); bit quit_RST (void); bit set_rate(unsigned char CAN_rate_num);bit set_ACR_AMR(unsigned char ACR_DATA,unsigned char AMR_DATA);bit set_CLK(unsigned char SJA_OUT_MODE, unsigned char SJA_Clock_Out);bit SJA_send_data(unsigned char *senddatabuf);bit SJA_rcv_data(unsigned char *rcvdatabuf);bit SJA_command_control(unsigned char order);宏定义操作的命令字;
子函数:将访问地址指向SJA1000的相应寄存器,保存原始值,操作原始值,赋值给访问地址,再判断一下是否成功




fclkout=fxtal/时钟分频因子(1 2 4 6 8 10 12 14)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-10-15 15:19:26 | 显示全部楼层
无标题视.gif
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2023-10-16 15:47:43 | 显示全部楼层
嵌入式系统,比较特殊的计算机系统,基本构成硬件软件两部分。系统软件,再硬件和应用程序之间,通过提供应用程序接口API屏蔽了计算机硬件工作的一些细节,提高了应用程序的开发效率。裸机。主要功能,处理器的管理,中断和任务调度,存储管理,设备管理,文件管理,网络和通信管理,提供用户接口。MCU阶段,SoC阶段。可编程的。 专用性强、可裁剪性号,实时性和可靠性,功耗低、易移植性。裸机开发,实时擦欧总系统Real Time Operation System RTOS, 逻辑或功能正确(Logical or Functional Correctness),时间正确性(Timing Correctness)对计算超时由于一定容忍度:硬实时操作系统、软实时操作系统。分时操作系统。
void mytask(void *pdata){for(;;){/*user code*/}} C语言的任务代码,任务实质尚是一个返回类型为void的函数,并在函数的无限循环中完成用户的工作。该过程中如何响应外部异步事件,使用中断。μC/OS-Ⅱ支持64个任务。微内核。自己设计或外购。μC/OS-Ⅱ是用C语言和汇编语言编写的,其中绝大部分用C语言编写的,极少部分与处理器密切相关的额代码用汇编语言编写,用户 只要做很少的工作就可以把它移植到各类8位、16位和32位嵌入式处理器上。体系架构:
与小任务对应的程序实体叫做任务,实质是一个线程,小任务运行管理和调度。任务程序代码(用来保存任务属性)、任务堆栈(用来保存任务工作环境)和任务控制块(用来保存任务属性)。两种任务:用户任务和系统任务。任务在内存中的结构:任务的组成、任务链表:
任务状态,一个具体时刻只能允许一个任务占用CPU,任务5种状态,  不同状态之间转换:
用户任务代码的一般结构,根据嵌入式系统任务的工作特点,任务的执行代码通常是一个无线循环结构,并且在这个循坏中可以响应中断,这种结构也叫做超循环结构。、
void MyTask(void * pdata){for(;;){可以被中断的用户代码; OS_ENTER_CRITICAL()关中断; 不可以被中断的用户代码; OS_EXIT_CRITIAL()开中断; 可以被中断的用户代码;}}
用户应用程序的结构:void MyTask1(void * pdata){for(;;){...}} void MyTask2(void * pdata){for(;;){...}} void MyTask3(void * pdata){for(;;){...}}  void main(){ OSInit();  OSTaskCreate(MyTask1,..); OSTaskCreate(MyTask2,..); OSTaskCreate(MyTask3,..);  OSStart(); ...} OSTaskCreat()为操作系统提供的用来创建任务的函数,OSStart()为操作系统提供的启动各任务的函数,使用函数OSStart()启动了各任务之后,任务就交给操作系统来管理和调度
系统任务:预定义两个为应用程序服务的系统任务:空闲任务和统计任务。空闲任务:无用户任务可运行而处于所谓的空闲状态,没有用户任务可执行CPU有事可做,提供了一个叫做空闲任务OSTaskIdle()的系统任务,代码void OSTaskIdle(void * pdata){# if OS_CRITICAL_METHOD==3 OS_CPU_SR cpu_sr; #ednif pdata=pdata;for(;;){OS_ENTER_CRITICAL()关闭中断;OSdleCtr++计数;OS_EXIT_CRITICAL()开放中断;}}  统计任务OSTaskStat(),这个统计任务每秒计算一次CPU在单位事件内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUUsage,以便应用程序胡通过访问它来了解CPU的利用率,所以系统任务OSTaskStat()叫做统计任务。如果用户应用程序要使用这个统计任务,需要把定义在系统头文件OS_CFG.H中的系统配置常数)S_TASK_STST_EN设置为1,并在创建统计任务之前调用函数OSStatInit()对统计任务进行初始化
截图202310161125136549.jpg 截图202310161132132844.jpg 截图202310161132355138.jpg 截图202310161135086204.jpg 截图202310161135545665.jpg

任务的优先权及优先级别 0最高 为节省内存,OS_CFG.H中最低优先级别常数OS_LOWEST_PRIO0,1,2,。。。,OS_LOWEST_PRIO
堆栈就是在存储器中按后进先出LIFO原则组织的连续存储空间,每个任务都应该有自己的堆栈。在文件OS_CPU.H中专门定义了一个数据类型OS_STK,typedef unsigned int OS_STK; 在应用程序中定义任务堆栈即定义一个OS_STK类型的数组 #define TASK_STK_SIZE 512     OS_STK TaskStk[TASK_STK_SIZE];  当调用函数OSTaskCreate()来创建一个任务时,把数组的指针传递给函数OSTaskCreate()中的堆栈栈顶参数ptos,就可以把该数组与任务关联起来而成为该任务的任务堆栈。创建任务函数OST ask Create()的原型:INT8U OSTaskCreate(void (*task)(void *pd), void =pdata, OS_STK *PTOS, INT8U prio);
处理器,堆栈增长方向,向上、向下,提高应用程序的可以执行,在编写程序时把两种代码都编写出来,利用OS_CFG.H文件中的常数OS_STK_GROWTH作为选择开关,用户定义它,以适应不同的堆栈增长方式需要。
任务堆栈的初始化:当CPU启动运行一个任务,CPU各寄存器总是需要预置一些初始数据人(如指向任务的指针、程序状态字PSW等),系统启动任务,CPU从任务堆栈里获得这些数据,从堆栈中赋值到CPU各寄存器使任务顺利启动运行,任务堆栈的初始化工作由操作系统负责。创建任务函数OSTaskCreate()中调用初始化函数OSTaskStkInit()来完成 OS_STK * OSTaskStkInit()此函数是μC移植时按处理器由用户编写内容
任务控制块一个结构类型数据,当用户你应用程序调用OSTask Create()函数创建一个用户任务时,这个函数会对任务控制块中多有成员赋予与带任务相关的数据,并驻留在RAM中,任务控制块结构体的定义再记下。用两条链表来管理任务控制块,系统在调用行数OSInit()初始化系统时在RAM中建立一个OS_TCB结构类型的数组OSTCBTB[],每个数组元素就是一个任务控制块,连接成链表,空链表。操作系统负责任务控制块初始化,用户程序掉用创建任务,函数调用系统函数OSTCBInit()进行任务控制块初始化
任务调度:通过一个算法在多个任务中确定哪个任务来运行,任务调度器,思想:每时每刻让优先级最高的就绪任务处于运行状态。任务就绪表。优先级高低顺序,每个任务一个位,1就绪,0非就绪。任务被中止运行时的位置叫做断点从,任务恢复运行时,在断点处以断点数据(PC PSW 通用寄存器中的数据)作为初始数据接着运行。一般情况中断服务程序要用汇编语言来写寄存器操作。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2024-5-31 20:05:12 | 显示全部楼层
【何教授 CAN总线原理及实战】12月18日上 学习笔记


博世 协议文本 --》Intel CAN控制器芯片 Philips CAN控制器芯片 --》奔驰

CAN2.0B规范。 分层模型。
CAN FD 1.0(可变数据速率CAN),兼容CAN。

物理层协议:CAN控制器输出驱动器逻辑,CAN收发器(PHY驱动芯片)输出差分信号。逻辑0 --》显性信号。
                   (管子工艺)PNP晶体管 --》 CANH    NPN晶体管--》CANL     晶体管没有导通--》隐形电压

规约
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2024-6-4 19:35:44 | 显示全部楼层
《CAN总线原理和实战》12月19日中、下

协议,规范,知识的集成,  拒收/过滤机制,    CAN控制器 MCU的外设模块,  发送条件:发送缓冲器有数据,&& 网络条件具备,   消息帧, 高可靠性通讯,校验,多种校验方式。
直流部分,磁化线缆;位填充,破坏直流,提供足够多的上升沿
规范,分层结构,不同硬件和软件解决不同问题。
多播
位速率,串口的要求。    静态消息优先级。
远程帧,远程数据请求。
机制。
香浓定理。
dominant显性 逻辑0 ;Recessive隐形 逻辑1;
CAN2.0B 数据链路层:LLC MAC

数据帧,远程帧,错误帧,过载帧(吞吐量概念,平衡网路数据传输量)。

帧起始    冲裁字段    控制字段    数据字段     CRC字段    ACK字段   帧结束

SOF(1位)     标识符(11位)     RTR     IDE     r0 DLC      数据字段
SOF(1位)  标识符(11位)  SRR    IDE  标识符18位   RTR     r0      r1    DLC

站。站点。

ID10 到 ID0 的顺序发送   ID0 LSB
最高的7位 (ID10 ~IDE4)不能都是隐形位
从高往低发送。

保留位必须显性发送。
DLC:数据长度的编码

生成多项式,表示异或运算,使用15位的移位寄存器CRC_RC(14:0),CAN控制器电路实现,异或电路。  CRC定界符。

应答。

屏蔽寄存器






回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2024-6-7 22:00:56 | 显示全部楼层
【CAN总线原理及实战】12月20日 上


位错误,晶体管,Tx 同时 Rx,协议设计巧妙之处;
位填充错误,每5个相同逻辑位,填充;
CRC错误,校验错误;
格式错误,非法位;
保证可靠传输。
响应错误,ACK应答槽;

错误指示,错误管理,一个站:错误主动,错误被动,总线关闭。
评判的过程,规则。CAN控制器 两种计数器,发送错误计数器,接收错误控制器,接受计数器+1,+8,CAN控制器的错误管理单元。
容错,-1,

位时序要求,同步,采样点,串口,标称位时间 = 1 / 标称位速率。采样点,读取总线电平并解释为相应位的值的时间点。

速率高,传输介质要求

时间份 TQ

位时间可编程是必要的

隐形到显性的边沿,硬同步;

模块内部结构框架
截图202406072153182264.jpg


STC32G系列单片机集成了两路CAN接口控制器 第一路引脚的位置通过P_SW1寄存器 地址A2H   通过多路选择器决定引脚

第二路引脚位置通过P_SW3寄存器设置 地址BBH

外设


截图202406072153062251.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:88
  • 最近打卡:2025-01-10 10:05:14

4

主题

36

回帖

110

积分

注册会员

积分
110
发表于 2024-7-31 20:05:52 | 显示全部楼层
小白虽然还看不懂很多,但能学习很多还是挺激动的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 20:40:21

1

主题

75

回帖

345

积分

中级会员

积分
345
发表于 2024-8-4 11:47:25 | 显示全部楼层
《CAN总线原理及实战》 - 12月20日下


CAN总线接收寄存器 和 CAN总线接收屏蔽寄存器

通过逻辑运算    当接收屏蔽位为“1”时,即无关,均接收
                       当接收屏蔽位为“0”时,即相关,然后比较ACR

轻量级协议,设计巧妙之处。

总线错误信息寄存器 ECC
截图202408041113331027.jpg

B7 当RXERR 接收错误寄存器 大于等于96时该位置位
B6 当TXERR- 发送错误寄存器 大于等于96时该位置位
B5 该位为0时,发送时发生错误,该位为1时,接收时发生错误
B4 ACK错误
B3 FRMER 帧格式错误
B2 CRC错误
B1 位填充错误
B0 位错误

ALC 总线仲裁丢失寄存器  仲裁丢失的位置的信息   
截图202408041120306421.jpg

截图202408041120567092.jpg

截图202408041121412859.jpg

参考电路 原理图
TJA 1050 CAN收发器    (1042/3)
截图202408041125095971.jpg


CAN总线数据帧发送缓存 TXBUFn  !!!
截图202408041129535458.jpg 截图202408041130483658.jpg


【重要】初始化要发送数据并给出一个CANID号    要发送数据怎么写入发送缓冲区的       调用一个CanSendMsg(CAN_ID, TX_BUF)函数  
读、写寄存器     CPU处理    CAN地址寄存器  CAN数据寄存器    数据怎么发送出去的     数据帧发送缓存 TX_BUFn
截图202408041138528678.jpg

Buffer放到数组里面
截图202408041139093920.jpg

根据需要,调用读FIFO函数,把需要数据放进一个数组。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:151
  • 最近打卡:2025-05-24 00:23:07

4

主题

129

回帖

253

积分

中级会员

积分
253
发表于 2024-10-3 16:41:46 | 显示全部楼层
画的什么东西
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-10-5 11:42:18 | 显示全部楼层
大*** 发表于 2023-9-5 11:29
陈教授《STC最新8051单片机原理及应用--STC8H8K64U》(7月26日) -- 学习笔记

数字电路、数字逻辑:高/低电 ...

加油
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-24 17:40 , Processed in 0.122219 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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