一、CAN物理层
1、电气特性
2、CAN的电平形式
二、CAN总线帧格式
1、数据帧
帧起始(标准/扩展格式相同)
仲裁段(标准/扩展格式不同)
控制段(标准/扩展格式不同)
数据段(标准/扩展格式相同)
CRC段(标准/扩展格式相同)
ACK段(标准/扩展格式相同)
帧结束(标准/扩展格式相同)
2、遥控帧
3、错误帧
4、过载帧
5、帧间隔
四、位时序
五、波特率的计算
六、位填充
1、发送单元的工作
2、接收单元的工作
七、附录
1、数据长度码和字节关系
CAN通讯是一种多主总线异步通信协议,采用差分信号传输,具有高可靠性、实时性强、抗干扰能力好等特点。它广泛应用于汽车电子、工业控制等领域,用于设备间数据快速准确传输,保障系统稳定运行。
一、CAN物理层1、电气特性
总线结构物理特征如下图所示(左:闭环;右:开环)
CAN总线由两根信号线组成,使用的是差分信号,是一种异步通讯CAN总线网络...
创建虚拟环境
查看所有虚拟环境
退出当前虚拟环境
激活/进入虚拟环境
删除某一虚拟环境
查看当前虚拟环境下的所有的安装包
安装或卸载包(进入虚拟环境之后)
分享虚拟环境
源服务器管理
pip源
创建虚拟环境123456789# 创建名为env_name的虚拟环境conda create --name env_name# 创建名为env_name的虚拟环境,指定python版本conda create --name env_name python=3.8# 创建指定python版本下包含某些包的env_name虚拟环境conda create --name env_name python=3.6 pandas numpy scipy
查看所有虚拟环境123conda info --envs# 或者conda env list
退出当前虚拟环境1deactivate
激活/进入虚拟环境1activate env_name
删除某一虚拟环境1conda remove --name env_name --all
查看当前虚拟环境...
1、添加源服务器
2、创建运行环境
3、vscode安装PYQT Integration插件
1、添加源服务器12conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
2、创建运行环境1234567891011# 创建虚拟环境conda create --name pyqt6-python3.8 python=3.8 # 激活环境conda activate pyqt6-python3.8# 安装PyQt6pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simple/# 安装PyQt6-toolspip install PyQt6-tools -i https://pypi.tuna.tsinghua.ed...
一、常用寄存器操作
二、寄存器写操作
一、常用寄存器操作12345678/* 设置位 (置1) */*pReg |= (1 << bit_position);/* 清除位 (置0) */*pReg &= ~(1 << bit_position);/* 取反 */*pReg ^= (1 << bit_position);
二、寄存器写操作如下所示为配置Pc13引脚为输出模式的错误示例:
12345678/* 配置为通用输出 * 00:Input mode * 01:General purpose output mode * 10:Alternate function mode * 11:Analog mode(reset state)*/pReg = (uint32_t *)(0x48000800 + 0x00);*pReg |= 0x01 << 26;
默认配置为为11,上述操作只修改了第二位,第一位未修改,导致配置错误,正确配置如下:
1234/* 配置为通用输出 */pReg = (uint32_t *...
一、存储器映射
STM32H750存储器映射
二、Block 0
三、Block 1
四、Block 2
STM32H750 是 ST 基于 Cortex-M7 内核的高性能 MCU,其复杂的 存储器架构 和 多总线矩阵 为开发者提供了极高的灵活性,但也带来了学习难度。深入了解STM32存储器映射和物理内存布局,了解不同存储区域的用途与性能差异,对于我们实际开发,如bootloader程序编写、MPU配置、链接脚本等,有着巨大帮助。
一、存储器映射STM32是一个32为单片机,它可以很方便访问4GB以内的存储空间,存储器本身是没有地址信息的,对存储器分配地址的过程就叫存储器映射。ST将所有的存储器及外设资源都映射在一个4GB的地址空间上(8个块),从而可以通过访问对应的地址,访问具体的外设。其映射关系如下图所示:
STM32H750存储器映射二、Block 0
地址范围
功能
0x0000 0000 ~ 0x0000 FFFF
ITCM RAM,只能被CPU和MDMA 访问,属于高速的RAM
0x0001 0000 ~ 0x000F FFFF
...
对上述分散加载文件逐行解析如下:
一、定义加载区域(Load Region)
2)定义执行区域(Execution Region)
(3)指定复位向量和启动代码
(4)C 库初始化段
(5)所有只读代码和常量
(6)所有可执行的只读代码
(7)定义 RAM 区域
(8)分配读写数据和零初始化数据
在 STM32嵌入式开发 中,分散加载文件(.sct或.ld文件)是ARM编译器用来定义代码和数据在存储空间的布局的链接脚本。它告诉编译器如何将代码和数据分配到不同的存储区域(如Flash、RAM、TCM等)。合理使用分散加载文件可以优化性能、提高实时性,甚至增强系统稳定性。
STM32的sct分散加载描述文件如下:
123456789101112131415; *************************************************************; *** Scatter-Loading Description File generated by uVision ***; *******************************...
在工程下创建.vscode文件夹
在工程下创建.vscode文件夹
c_cpp_properties.json文件
1234567891011121314151617181920212223242526272829303132333435363738394041424344{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "./Core/Inc", "./Drivers/STM32h7xx_HAL_Driver/Inc", "./Drivers/STM32h7xx_HAL_Driver...
一、易失性存储器(RAM)
1、动态随机存储器DRAM(Dynamic RAM)
2、静态随机存储器SRAM
二、非易失性存储器(ROM)
三、非易失性存储器(FLASH)
四、应用
五、新兴存储器技
六、其他
1、为什么叫 NOR / NAND?
2、什么是DDR模式和SDR模式?
存储器是计算机系统中不可或缺的重要组成部分。它主要用于存储程序代码和数据,使计算机具备记忆和运行的功能。
存储器按其存储介质特性主要分为两大类:易失性存储器和非易失性存储器。
易失性存储器:在断电后数据会丢失,如 RAM。
非易失性存储器:即使断电也能保留数据,如 ROM、Flash,以及一些新兴技术。
一、易失性存储器(RAM)RAM(Random Access Memory)是易失性的半导体存储器,用于存储运行中的程序和数据。
1、动态随机存储器DRAM(Dynamic RAM)动态随机存储器(DRAM) 是一种易失性存储器,采用电容存储数据(电容带电表示 1,不带电表示 0),需要定期刷新以维持数据完整性。由于其依赖时钟信号进行数据传输,因此通常被称为同步 D...
应用一、为基本数据类型定义新的类型名
应用二、为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称
应用三、定义数组类型
应用四、定义指针类型
1、定义数组指针类型
2、定义函数指针类型
五、总结
良好的代码习惯和高效的类型定义在项目中扮演着至关重要的角色。typedef,它不仅是一个语法糖,更是提升代码质量和可维护性的利器。在这篇文章中,将为你介绍typedef 4 种应用方式。
应用一、为基本数据类型定义新的类型名用uint32_t替代unsigned int声明变量
12345/* 变量名重定义 */typedef unsigned int uint32_t;/* 定义一个`unsigned int`类型的变量 */uint32_t count = 0;
应用二、为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称使用结构体定义以及声明结构体变量:
123456789struct TagPoint{ double x; double y; double z;};/* 定义一个三维坐标结构体 *//...