- 博客(110)
- 收藏
- 关注
原创 i2C扩展
GPIO:I2C:如果设置为推挽输出,2个从机一个设置为高一个设置为低,会导致这条线路短路(绿色的线)必然会有一个设备烧毁。开漏输出。
2026-02-20 10:19:03
1109
原创 03:C++继承
Class 派生类名 : 继承方式 基类名//派生类新增的数据成员和成员函数三种继承方式:public : 公有继承private : 私有继承protected : 保护继承派生类名-->子类名称基类名-->父类名称public:protected:int _name;//姓名int _age;//年龄/*继承后父类的Person的成员(成员函数+变量)都会变成子类的一部分。这里体现出了Student和Teacher复用了Person的成员。
2026-02-01 17:00:12
798
原创 02:C++ 类和对象
属性:变量行为:函数/方法class 类名访问控制符:成员变量 //属性;成员函数 //方法> 访问控制符有三种:public,private,protected实例:定义一个类描述一种动物public://属性//名字int age;//年龄//方法void jiao(char *voice) //描述动物叫的行为,voice为叫的声音> 注意:1、访问控制符我们先使用public,后面再探讨访问控制符的作用> 2、一般的类的名字首字母大写。
2026-01-31 15:19:42
908
原创 01:C++拓展
1、创建名字是程序设计过程中一项最基本的活动,当一个项目很大时,它会不可避免地包含大量名字。c++允许我们对名字的产生和名字的可见性进行控制。我们之前在学习c语言可以通过static关键字来使得名字只得在本编译单元内可见,在c++中我们将通过一种通过命名空间来控制对名字的访问。2、在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。
2026-01-30 13:20:30
919
原创 00:C++前言
1、与c语言一样,c++也是在贝尔实验室诞生的,Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)在20世纪80年代在这里开发了这种语言。2、c++融合了3种不同的编程方式:* c语言代表的过程性语言.* c++在c语言基础上添加的类代表的面向对象语言.* c++模板支持的泛型编程。3、C++和C语言的关系c++语言是在C语言的基础上,添加了**面向对象、模板**等现代程序设计语言的特性而发展起来的。
2026-01-30 11:33:53
764
原创 串口---RS232/485
本文介绍了串口通信中RS232和RS485两种协议的特点及应用。RS232和RS485都是电气层协议,依赖串口进行通信。文中对比了UART、RS232和RS485的电压标准、传输距离等特性,指出RS232存在电平不兼容、速度低等问题,而RS485具有多站能力、抗干扰性强等优势,适合远距离组网应用。
2025-09-15 21:34:26
1106
原创 C/单片机内存管理,仿真keii
我们使用stm32f103c8t6系列测试Commercial Product Code(商用产品型号)Core(内核)Frequency (MHz)(频率)Flash (Kbytes)(闪存容量)RAM (Kbytes)(随机存取存储器容量)Package(封装)726420LQFP48Flash 存储器(ROM)
2025-08-16 19:48:13
1398
原创 C语言指针
1.计算机存储机制使用小段储存,现在大多数的计算机都使用小段储存数据数组按顺序储存数据,是一整段的连续内存,数据的内部采用小段储存。2.定义指针指针即指针变量,用于存放其他数据单元(变量/数组/结构体/函数等)的首地址。若指针存放了某个数据单元的首地址,则这个指针指向了这个数据单元,若指针存放的值是0,则这个指针为空指针 定义一个指针变量:16位系统:x=2,32位系统:x=4,64位系统:x=864位系统中所以的指针都是8个字节注意:他们的步长不相同:指针的步长取决于他所指向的变量。
2025-07-08 14:59:25
1179
原创 CAN:代码篇
APB1=36MHzTimeSeg1=5TimeSeg2=2ENABLE:启用时间触发通信模式(TTCM)DISABLE:禁用 TTCMENABLE:启用自动总线关闭恢复(ABOM)DISABLE:禁用 ABOMENABLE:启用自动唤醒(AWUM)DISABLE:禁用 AWUMENABLE:启用自动重传(NART=0)DISABLE:禁用自动重传(NART=1)ENABLE:启用接收 FIFO 锁定(RFLM)DISABLE:禁用 RFLMENABLE:启用发送 FIFO 优先级控制(TXFP)
2025-06-20 17:05:33
1120
原创 CAN2.0总线介绍
STM32内置bxCAN外设(CAN控制器),支持CAN2.0A和2.0B,可以自动发送CAN报文和按照过滤器自动接收指定CAN报文,程序只需处理报文数据而无需关注总线的电平细节波特率最高可达1兆位/秒3个可配置优先级的发送邮箱 2个3级深度的接收FIFO14个过滤器组(互联型28个)时间触发通信、自动离线恢复、自动唤醒、禁止自动重传、接收FIFO溢出处理方式可配置、发送优先级可配置、双CAN模式STM32F103C8T6 CAN资源:CAN1。
2025-06-20 17:05:29
1695
原创 20:HAL--RNG
F1系列的没有RNG,使用本次说的都是F407的,我使用的是STM32F407VET6。STM32F407VET6不需要,单独配置时钟。伪随机数就是rand函数产生的数。按键我们采用的为电容按键。
2024-09-07 18:46:54
599
原创 19:HAL—-DAC
F1,F4,F7的DAC框架图都一样。触发源:宏定义补全及解释解释请注意,对于的注释中提到的TIM3可能是一个错误,因为根据宏定义中的位操作,它实际上对应的是TIM5的TRGO(假设和分别对应于选择触发源的位字段)。此外,实际上并不直接对应于任何定时器的TRGO,而是直接由软件触发(即位被设置),这与相同,但通常的命名更直接地表达了其意图。
2024-09-07 14:51:47
1201
原创 18:HAL--DMA
STM32F407VET6 : DMA的资源有--DMA1,DMA2。DMA1:挂载在APB1上面----42MHZDMA2:挂载在APB2上面----84MHZ。
2024-09-05 17:19:31
1563
原创 OLED模块
官方的例程推荐的是垂直扫描的方式,也就是先画垂直方向的8个像素点(如下图所示),所以我们在画点的时候Y的取值为0-7,X的取值为0-127。(一共8页,每页128个字节)D/C: D/C是借用SDIN引脚指定的,一个时钟,发送一位,但是在每个字节之前,先发送一个位,表示D/C之后,再跟8个位,传输一个字节。每次传输的一个字节,都有9个位:第一个是D心,指定此字节是命令还是数据,剩下8个,才是真正的字节。这个时候已经进入我们的写命令了,下一个直接发送我们需要写入的命令,再接收一个从机的应答。
2024-08-31 15:30:53
4654
原创 01:PID
位式控制算法是一种通过比较设定值(SV)和当前值(PV)来控制目标的方法。当PV小于SV时,输出高电平,执行部件工作;当PV大于或等于SV时,输出低电平,执行部件不工作。这种算法的输出信号一般只有两种状态(LOW / HIGH)。1:位式控制算法的输出信号out只有H和Ll两中状态2:out的状态。
2024-08-06 16:11:56
1870
原创 17:低功耗篇(PWR)---HAL库
也可以是使能到中断,但是没有配置NVIC , 调用WFE进入的睡眠模式 ,产生唤醒事件时,会立刻醒来 , 醒来之后,一般不需要进中断函数 , 直接从睡的地方继续运行。-------- 你程序刚上电,是72MHz的主频 , 但是进入停止模式,再唤醒之后 , 就变成8MHz的主频了;: WFI--------任何外设发生任何中断时,芯片都会立刻醒来 , 因为中断发生了,所以醒来之后的第一件事一般就是处理中断函数,处理完中断, 直接从睡的地方继续运行。
2024-07-15 03:27:19
1649
原创 16:RTC---HAL库
必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器--------其实这个操作在库函数中, 每个写奇存器的函数, 它都自动帮我们加上了这个操作, 所以我们就不用再单独调用代码,进入配置模式了。对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。时钟输出, 可以把RTC的相关时钟, 从PC13位置的RTC引脚输出出去,供外部使用, 其中,输出校准时钟时, 再配合这个校准寄存器,可以对RTC的误差进行校准。
2024-07-13 15:06:59
1606
原创 00:HAL库的认识
该文件夹存放的是ST官方的开发板的适配例程,每个文件夹对应一个ST官方的Demo板,根据型号的不同提供MDK和IAR等类型的例程。: \STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device" 和 \STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Include"文件夹复制到下面。stm32f103xb.h:我们使用的为,stm32F1C8T6的FLASH为64K,为中容量的,使用我们选择:这个文件。我们使用的是STM32F103C8t6的这个。
2024-07-10 15:31:59
1811
原创 01:HAL库DMA解算舵机
*MPU6050的欧拉角范围可以按照以下方式清晰地表示和归纳:Pitch角(俯仰角):绕Y轴旋转范围:±90°方向:与旋转方向相反转是增大。具体来说,抬头时Pitch角为正,低头时Pitch角为负。Roll角(横滚角):绕X轴旋转范围:±180°方向:与旋转方向相反转是增大。具体来说,右滚时Roll角为正,左滚时Roll角为负。Yaw角(偏航角):绕Z轴旋转范围:±180°方向:与旋转方向相反转是增大。具体来说,右偏时Yaw角为正,左偏时Yaw角为负。
2024-06-18 16:24:26
1077
原创 15:HAL----ADC模数转化器
ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间输入电压范围:0~3.3V,转换结果范围:0~409518个输入通道,可测量16个外部(GPIO)和2个内部信号源(内部温度传感器和内部参考电压)规则组和注入组两个转换单元模拟看门狗自动监测输入电压范围 STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道。
2024-06-13 10:55:43
1103
原创 14:HAL---CRC校验
CRC(Cyclic Redundancy Check),即循环冗余校验,是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法,主要用来检测或校核数据传输或者保存后可能出现的错误。
2024-05-11 18:56:47
1910
原创 13:HAL---SPI
-------------Flash并没有像RAM那样的, 直接完全覆盖改写的能力. eg:在某一个直接的储存单元首先储存了0xaa 1010 1010 在储存0x55 0101 0101 因为Flash没有直接覆盖数据的能力, 在加上第二条规定的限制实际储存的数据为: 0000 0000 不是0x55, 使用在写入第二给数据前必须擦除之前的数据。在SS为低电平时,MISO才允许变为推挽输出----------------不能指定某一个字节去擦除, 要擦,就得一大片一起擦, 在我们这个芯片里;
2024-05-09 18:14:55
997
原创 12:HAL----I2C
解决上面遗留的BUG点,为了方便我们只在这里只做主机从机2的//发送DMA//接收///通信速率1//7位寻址模式//开启事件中断//复用开漏输出//MDA通道6配置--发送数据//传输方向:内存(数组)--->外设//内存数据宽度//存储区地址自增//外设数据宽度//外设地址不自增//优先级//双向链接//MDA通道7配置---接收数据//传输方向:外设 ---> 内存(数组)//内存数据宽度//存储区地址自增。
2024-04-28 17:58:26
2499
1
原创 06:HAL----定时器
TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 (计数器、预分频器、自动重装寄存器构成时基单元)不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。
2024-04-20 15:01:48
3006
5
原创 09:HAL--通用定时器编码器接口
编码器接口,都是上升沿和下降沿都有效的 , 上升沿和下降沿都需要计次 , 所以在编码器接口模式下 , 边沿检测极性选择就不再是边沿的极性选择了 , 而是高低电平的极性选择.之前的代码是通过触发外部中断 , 然后在中断函数里手动进行计次-----见02:STM32--EXTI外部中断。选择下升沿的参数-------就是信号通过一个非门过来,高低电平极性反转----5:极性反转。选择上升沿的参数------就是信号直通过来,高低电平极性不反转---5:极性不反转。上面的2个模式--只在一个计数。
2024-04-20 15:00:46
1548
原创 11:HAL--定时器代码总结
DMA循环方式,每次传输4次数据第一次定时1s,第二次定时2s,第三次定时3s,第四次定时4s第五次定时5s,第六次定时2s,第七次定时3s,第八次定时4s第九次定时5s,第十次定时2s,往复循环。捕获中断不会打开更新中断,HAL_TIM_IC_Start_IT()中不会打开更新中断,所以需要我们手动打开: __HAL_TIM_ENABLE_IT(&HandleTIM4CH1,TIM_IT_UPDATE);当我们按键按下,首先发生触发和更新中断,把我们的CNT和预分频器值置为0,保证了起始值为0,
2024-04-20 14:56:45
1192
原创 08:HAL---通用定时器功能(输入捕获功能)
下面的以通用定时器为例,当然高级定时器具有通用定时器的全部功能ICP1S:上面经过分频后的信号;这里的捕获指的是产生一个捕获事件。
2024-03-31 17:53:27
3154
原创 07:HAL------通用定时器功能(输出比较PWM)
下面的以通用定时器为例,当然高级定时器具有通用定时器的全部功能灰色部分为我们的输入捕获部分,下节说舵机是一种根据输入PWM信号占空比来控制输出角度的装置输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms高电平宽度=某电频的持续时间CCR=高电频舵机的控制一般需要一个20ms的时基脉冲(周期),该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度舵机为例,那么对应的控制关系是这样的:0.5ms--------------0度;
2024-03-30 23:10:13
2130
原创 05:HAL-----看门狗WDT
上面这个预分频j寄存器IWDG PR, 可以配置分频系数, 这个PR和定时器的PSC (//预分频器PSC) 是一个意思 -----------------开始 : A :这个时钟源是PCLK1(36MHz)---------B: 先经过一个预分频器进行分频 , 这个和独立看门狗的预分频器,定时器的预分频器相同---------C: 分频之后的时钟,驱动这个计数器进行计数(6位递减计数器)...........如果在计数器计数结束前,若软件没有向键寄存器写入相应的值,则系统会产生复位。
2024-03-25 15:39:04
1658
1
原创 04:HAL----串口通信UART
通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统通信协议:制定通信的规则,通信双方按照协议规则进行数据收发TX: 发送数据的引脚RX :接收数据的引脚I2C通信:SCL: 时钟SDA:数据SPI通信:SCLK:时钟MOSl:主机输出数据脚MISO: 主机输入数据脚CS: 片选,用于指定通信的对象CAN通信:是差分数据脚,用两个引脚表示一个差分数据USB通信:也是 是差分数据脚双工全双工:就是指通信双方能够同时进行双向通信, 两个数据线分别负责发送和接收数据半双工。
2024-03-17 17:43:41
3672
7
原创 03:HAL---中断
正转-----B相下降沿和A相低由平时同时满足时;反转----在A相下降沿和B相低电频同时满足时;不管有几个中断我们,我们自己写的中断服务函数和处理中断的函数不要我们定义,在HAL库中已经定义了。//注意名字要中断相同//中断处理函数;
2024-03-08 17:43:57
2747
原创 01:HAL库---时钟
我们使用的是STM32F103CT86的型号时钟在在我们的单片机中非常重要,相当于我们的人类的心脏;简单来说,时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波;三种不同的时钟源可被用来驱动系统时钟(SYSCLK)● HSI振荡器时钟● HSE振荡器时钟● PLL时钟这些设备有以下2种二级时钟源:● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机待机模式下自动唤醒系统。低速外部晶体也可用来通过程序选择驱动。
2024-03-05 17:49:00
3192
原创 06:2440----异常与中断
在这五种异常模式中每个模式都有自己专属的R13 R14寄存器,R13用作SP(栈) R14用作LR(返回地址),LR是用来保存发生异常时的指令地址(可以理解为我们上面说的保存现场,用于我们在处理完中断,之后继续处理我们的程序)SPSR保存的程序状态寄存器:表示发生异常时这个寄存器会用来保存被中断的模式下他的CPSR,就比如我我的程序在系统模式下运行 CPSR是某个值,当发生中断时会进入irq模式,这CPSR_irq就保存系统模式下的CPSR。当某些位被置一时,对应的中断被屏蔽,即不会被处理。
2023-12-20 19:14:08
494
原创 05:2440----代码重定义
makefile文件不变这个也就是方法2一个程序,由代码段、只读数据段、数据段、bss段等组成。程序一开始可以烧在Nor Flash上面,运行时代码段仍可以在Nor Flash运行,但对于数据段,就必须把数据段移到SDRAM中,因为只要在SDRAM里面,数据段的变量才能被写操作(CPU无法直接访问NOR FLASH,NOR 不是内存类设备),把程序从一个位置移动到另一个位置,把这个过程就称为重定位。前面的例子,我们只是重定位了数据段,这里我们再尝试重定位整个代码。
2023-12-02 20:57:27
357
原创 04:2440---内存控制器
操作GPIO: 我们可以编写程序,让CPU去访问里面的寄存器eg:GPFCON配置寄存器 . 可以设置这个寄存器,把某个引脚设置为输出或者输入;GPFDATA数据寄存器, 可以设置某个引脚发出高低电平.UART一样我们可以写程序让CPU访问某些特定的寄存器.对于CPU来说,我不关心你这些具体的接口,我只是去操作某个寄存器。我CPU把某些值写给某些寄存器,由这些对应的控制器发出特定的波形。所以这个时候我们的内存控制器就来了。
2023-11-26 17:13:16
930
1
原创 02:2440---时钟体系
S3C2440A中的时钟控制逻辑可以产生所需的时钟信号,包括CPU的FCLK、AHB总线外设的HCLK和APB总线外设的PCLK。晶振-----选择器-----PLL锁相环(MPLL和UPLL)具体内容见1------HCLK和PCLK分别挂载在AHB总线和APB总线上面-----在线上面又挂载了许多外设。---是一个控制寄存器,用于控制系统时钟的分频和选择。------挂载在AHB总线上(高速总线)====>挂载了nand flash , LCD控制, USB, 电源管理等外设----136MHZ。
2023-11-12 19:18:15
336
原创 01:2440----点灯大师
栈的增长是随着程序的执行自动进行的,而数据的扩展则需要通过brk 系统调用来显式地完成,brk有一个参数来指定数据段的结束地址,它可比当前值大(表示扩展数据段 ),或是比当前值小(表示缩小数据段 )。我们采用的是交叉编译的方法---使用window书写汇编代码-----将汇编代码传给虚拟机-----在虚拟机下将传来的汇编代码编译为bin文件-----在将bin文件传给window-------window烧写bin文件给Linux开发板;配置GPFCON寄存器的[9:8]位为0b01-----输出模式;
2023-11-11 15:54:13
1002
1
空空如也
pytohn aes问题
2023-01-26
js代码转化python代码
2023-01-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅