- 博客(100)
- 收藏
- 关注
原创 20:HAL--RNG
F1系列的没有RNG,使用本次说的都是F407的,我使用的是STM32F407VET6。STM32F407VET6不需要,单独配置时钟。伪随机数就是rand函数产生的数。按键我们采用的为电容按键。
2024-09-07 18:46:54
414
原创 19:HAL—-DAC
F1,F4,F7的DAC框架图都一样。触发源:宏定义补全及解释解释请注意,对于的注释中提到的TIM3可能是一个错误,因为根据宏定义中的位操作,它实际上对应的是TIM5的TRGO(假设和分别对应于选择触发源的位字段)。此外,实际上并不直接对应于任何定时器的TRGO,而是直接由软件触发(即位被设置),这与相同,但通常的命名更直接地表达了其意图。
2024-09-07 14:51:47
943
原创 18:HAL--DMA
STM32F407VET6 : DMA的资源有--DMA1,DMA2。DMA1:挂载在APB1上面----42MHZDMA2:挂载在APB2上面----84MHZ。
2024-09-05 17:19:31
1036
原创 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
2780
原创 01:PID
位式控制算法是一种通过比较设定值(SV)和当前值(PV)来控制目标的方法。当PV小于SV时,输出高电平,执行部件工作;当PV大于或等于SV时,输出低电平,执行部件不工作。这种算法的输出信号一般只有两种状态(LOW / HIGH)。1:位式控制算法的输出信号out只有H和Ll两中状态2:out的状态。
2024-08-06 16:11:56
1210
原创 17:低功耗篇(PWR)---HAL库
也可以是使能到中断,但是没有配置NVIC , 调用WFE进入的睡眠模式 ,产生唤醒事件时,会立刻醒来 , 醒来之后,一般不需要进中断函数 , 直接从睡的地方继续运行。-------- 你程序刚上电,是72MHz的主频 , 但是进入停止模式,再唤醒之后 , 就变成8MHz的主频了;: WFI--------任何外设发生任何中断时,芯片都会立刻醒来 , 因为中断发生了,所以醒来之后的第一件事一般就是处理中断函数,处理完中断, 直接从睡的地方继续运行。
2024-07-15 03:27:19
1397
原创 16:RTC---HAL库
必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器--------其实这个操作在库函数中, 每个写奇存器的函数, 它都自动帮我们加上了这个操作, 所以我们就不用再单独调用代码,进入配置模式了。对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。时钟输出, 可以把RTC的相关时钟, 从PC13位置的RTC引脚输出出去,供外部使用, 其中,输出校准时钟时, 再配合这个校准寄存器,可以对RTC的误差进行校准。
2024-07-13 15:06:59
1315
原创 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
1000
原创 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
869
原创 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
705
原创 14:HAL---CRC校验
CRC(Cyclic Redundancy Check),即循环冗余校验,是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法,主要用来检测或校核数据传输或者保存后可能出现的错误。
2024-05-11 18:56:47
1325
原创 13:HAL---SPI
-------------Flash并没有像RAM那样的, 直接完全覆盖改写的能力. eg:在某一个直接的储存单元首先储存了0xaa 1010 1010 在储存0x55 0101 0101 因为Flash没有直接覆盖数据的能力, 在加上第二条规定的限制实际储存的数据为: 0000 0000 不是0x55, 使用在写入第二给数据前必须擦除之前的数据。在SS为低电平时,MISO才允许变为推挽输出----------------不能指定某一个字节去擦除, 要擦,就得一大片一起擦, 在我们这个芯片里;
2024-05-09 18:14:55
842
原创 12:HAL----I2C
解决上面遗留的BUG点,为了方便我们只在这里只做主机从机2的//发送DMA//接收///通信速率1//7位寻址模式//开启事件中断//复用开漏输出//MDA通道6配置--发送数据//传输方向:内存(数组)--->外设//内存数据宽度//存储区地址自增//外设数据宽度//外设地址不自增//优先级//双向链接//MDA通道7配置---接收数据//传输方向:外设 ---> 内存(数组)//内存数据宽度//存储区地址自增。
2024-04-28 17:58:26
1565
原创 06:HAL----定时器
TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 (计数器、预分频器、自动重装寄存器构成时基单元)不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。
2024-04-20 15:01:48
2516
5
原创 09:HAL--通用定时器编码器接口
编码器接口,都是上升沿和下降沿都有效的 , 上升沿和下降沿都需要计次 , 所以在编码器接口模式下 , 边沿检测极性选择就不再是边沿的极性选择了 , 而是高低电平的极性选择.之前的代码是通过触发外部中断 , 然后在中断函数里手动进行计次-----见02:STM32--EXTI外部中断。选择下升沿的参数-------就是信号通过一个非门过来,高低电平极性反转----5:极性反转。选择上升沿的参数------就是信号直通过来,高低电平极性不反转---5:极性不反转。上面的2个模式--只在一个计数。
2024-04-20 15:00:46
1401
原创 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
857
原创 08:HAL---通用定时器功能(输入捕获功能)
下面的以通用定时器为例,当然高级定时器具有通用定时器的全部功能ICP1S:上面经过分频后的信号;这里的捕获指的是产生一个捕获事件。
2024-03-31 17:53:27
2806
原创 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
1677
原创 05:HAL-----看门狗WDT
上面这个预分频j寄存器IWDG PR, 可以配置分频系数, 这个PR和定时器的PSC (//预分频器PSC) 是一个意思 -----------------开始 : A :这个时钟源是PCLK1(36MHz)---------B: 先经过一个预分频器进行分频 , 这个和独立看门狗的预分频器,定时器的预分频器相同---------C: 分频之后的时钟,驱动这个计数器进行计数(6位递减计数器)...........如果在计数器计数结束前,若软件没有向键寄存器写入相应的值,则系统会产生复位。
2024-03-25 15:39:04
1410
1
原创 04:HAL----串口通信UART
通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统通信协议:制定通信的规则,通信双方按照协议规则进行数据收发TX: 发送数据的引脚RX :接收数据的引脚I2C通信:SCL: 时钟SDA:数据SPI通信:SCLK:时钟MOSl:主机输出数据脚MISO: 主机输入数据脚CS: 片选,用于指定通信的对象CAN通信:是差分数据脚,用两个引脚表示一个差分数据USB通信:也是 是差分数据脚双工全双工:就是指通信双方能够同时进行双向通信, 两个数据线分别负责发送和接收数据半双工。
2024-03-17 17:43:41
2774
7
原创 03:HAL---中断
正转-----B相下降沿和A相低由平时同时满足时;反转----在A相下降沿和B相低电频同时满足时;不管有几个中断我们,我们自己写的中断服务函数和处理中断的函数不要我们定义,在HAL库中已经定义了。//注意名字要中断相同//中断处理函数;
2024-03-08 17:43:57
2310
原创 01:HAL库---时钟
我们使用的是STM32F103CT86的型号时钟在在我们的单片机中非常重要,相当于我们的人类的心脏;简单来说,时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波;三种不同的时钟源可被用来驱动系统时钟(SYSCLK)● HSI振荡器时钟● HSE振荡器时钟● PLL时钟这些设备有以下2种二级时钟源:● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机待机模式下自动唤醒系统。低速外部晶体也可用来通过程序选择驱动。
2024-03-05 17:49:00
2272
原创 06:2440----异常与中断
在这五种异常模式中每个模式都有自己专属的R13 R14寄存器,R13用作SP(栈) R14用作LR(返回地址),LR是用来保存发生异常时的指令地址(可以理解为我们上面说的保存现场,用于我们在处理完中断,之后继续处理我们的程序)SPSR保存的程序状态寄存器:表示发生异常时这个寄存器会用来保存被中断的模式下他的CPSR,就比如我我的程序在系统模式下运行 CPSR是某个值,当发生中断时会进入irq模式,这CPSR_irq就保存系统模式下的CPSR。当某些位被置一时,对应的中断被屏蔽,即不会被处理。
2023-12-20 19:14:08
351
原创 05:2440----代码重定义
makefile文件不变这个也就是方法2一个程序,由代码段、只读数据段、数据段、bss段等组成。程序一开始可以烧在Nor Flash上面,运行时代码段仍可以在Nor Flash运行,但对于数据段,就必须把数据段移到SDRAM中,因为只要在SDRAM里面,数据段的变量才能被写操作(CPU无法直接访问NOR FLASH,NOR 不是内存类设备),把程序从一个位置移动到另一个位置,把这个过程就称为重定位。前面的例子,我们只是重定位了数据段,这里我们再尝试重定位整个代码。
2023-12-02 20:57:27
228
原创 04:2440---内存控制器
操作GPIO: 我们可以编写程序,让CPU去访问里面的寄存器eg:GPFCON配置寄存器 . 可以设置这个寄存器,把某个引脚设置为输出或者输入;GPFDATA数据寄存器, 可以设置某个引脚发出高低电平.UART一样我们可以写程序让CPU访问某些特定的寄存器.对于CPU来说,我不关心你这些具体的接口,我只是去操作某个寄存器。我CPU把某些值写给某些寄存器,由这些对应的控制器发出特定的波形。所以这个时候我们的内存控制器就来了。
2023-11-26 17:13:16
694
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
228
原创 01:2440----点灯大师
栈的增长是随着程序的执行自动进行的,而数据的扩展则需要通过brk 系统调用来显式地完成,brk有一个参数来指定数据段的结束地址,它可比当前值大(表示扩展数据段 ),或是比当前值小(表示缩小数据段 )。我们采用的是交叉编译的方法---使用window书写汇编代码-----将汇编代码传给虚拟机-----在虚拟机下将传来的汇编代码编译为bin文件-----在将bin文件传给window-------window烧写bin文件给Linux开发板;配置GPFCON寄存器的[9:8]位为0b01-----输出模式;
2023-11-11 15:54:13
880
1
原创 单片机与进制数
非位置化数字系统: 一个符号在不同的位置只会表达同样的意思, 不像位置化数字系统同样的一个符号表达不同的意思, 比如:在非位置化数字系统中ⅤⅤⅤ表达的是:5+5+5=15,表达出的数字直接就是他们相加相减的结果,所以非位置化数字系在生活中不怎么使用.: 对于两个二进制数的或运算,一位任意一方的数字为1就取1,当同一位双方都为0时才取0。(遇1则1)----加法:0+0=0,0+1=1,1+0=1,1+1=10 (满2进1)减法:0-0=0,1-0=1,1-1=0,0-1=1(产生错位)
2023-10-29 22:30:18
567
原创 01:linux基础---gcc/makefile/gdb
函数库的概念printf函数在库中;库的默认路径为:编译器中的lib目录库可以指定:-L选项指定的目录 -l选项指定库(没有空格)-labc 意思 找libabc.so或者-labc 意思 找libabc.a的库我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现“printf”函数的呢?
2023-10-18 16:42:15
209
原创 16: KEil5的配置
我们需要给他加入几个文件夹: Hardware(硬件----把自己写的一些文件放在这个里面) , Library , Start , System(自己写的一些系统文件写在这个里面----eg: Delay函数) , User 文件里面放入我们需要的文件。------------------二:官网固件库的下载------二:Start文件夹下A: 启动文件。安装支持包----------可以安装keil软件支持所有芯片的支持包, EG: STM32F103C8T6。使用我们选择这个芯片。
2023-10-02 14:11:33
3248
原创 14:STM32-----看门狗
在stm32f10x_iwdg.h文件里面的独立看门狗函数: 写使能保护/***/在IWDG_KR键寄存器里面写入 使能还是不使能IWDG_SetPrescaler : 设置预分频系数----在预分频寄存器IWDG_PR里面写入IWDG_SetReload : 设置重装值----在重装载寄存器IWDG_RLR里面写入IWDG_ReloadCounter : 喂狗/***/在IWDG_KR键寄存器写入: 启动独立看/***/
2023-10-01 15:15:40
623
原创 13:STM32----PWR
睡眠模式其实都只是内核的操作, 睡眠模式涉及的几个寄存器 , 也都在内核里 跟PWR外设关系不大.停止模式 : 涉及到内核之外的电路操作, 这就需要用到PWR外设了在stm32f10x_pwr.h文件中----启用或禁用对RTC和备份寄存器的访问。使能后备区域的访问在stm32f10x_pwr.h文件中----启用或禁用唤醒引脚功能使能位于PAO位置的WKUP引脚在stm32f10x_pwr.h文件中----进入STOP模式进入停止模式在stm32f10x_pwr.h文件中----待机模式。
2023-09-26 21:24:14
1205
原创 12:STM32---RTC实时时钟
在stm32f10x_rcc.h的文件中-----时钟相关的函数: 配置外部低速时钟(LSE)RCC_LSICmd: 配置内部低速时钟(LSI): 这个函数用来选择RTCCLK的时钟源 , 实际上就是配置PPT的数据选择器: 使能--开启或者关闭RTC时钟时钟在选择完毕后 , 需要获取标志位,等待标志完成后在操作//选择外部低速时钟//LSE准备ok了在stm32f10x_rcc.h的文件中-----获取标志位函数在stm32f10x_rtc.h的文件中-----进入RTC配置模式。
2023-09-21 22:20:48
1729
原创 11:STM32---spl通信
-------------Flash并没有像RAM那样的, 直接完全覆盖改写的能力. eg:在某一个直接的储存单元首先储存了0xaa 1010 1010 在储存0x55 0101 0101 因为Flash没有直接覆盖数据的能力, 在加上第二条规定的限制实际储存的数据为: 0000 0000 不是0x55, 使用在写入第二给数据前必须擦除之前的数据。------------不能指定某一个字节去擦除, 要擦,就得一大片一起擦, 在我们这个芯片里;(接受和发送)缓冲区-----实际上就是数据寄存器DR;
2023-09-19 18:36:43
1352
原创 10:STM32------I2C通信
STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担支持多主机模型支持7位/10位地址模式支持不同的通讯速度,标准速度(高达100 kHz),快速(高达400 kHz)支持DMA兼容SMBus协议STM32F103C8T6 硬件I2C资源:I2C1、I2C2支持多主机模型-----STM32采用可以变多主机的模式, 谁想做主机谁跳出兼容SMBus协议。
2023-09-12 16:40:50
1580
原创 09:STM32-------USART串口通信+串口数据包
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里自带波特率发生器,最高达4.5Mbits/s 可配置数据位长度(8/9)、停止位长(0.5/1/1.5/2)可选校验位(无校验/奇校验/偶校验)
2023-09-07 21:23:42
3884
1
空空如也
pytohn aes问题
2023-01-26
js代码转化python代码
2023-01-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人