自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 trustZone学习

trustZone的概念

2022-09-03 13:47:06 501

原创 SDRAM和LCD 8080与SEMC

这里只是做我的记忆笔记SDRAMSDRAM 芯片向外部提供有独立的 BS(BA 线)类地址线用于 Bank 寻址,而行与列则共用 A 类地址线。与 SDRAM 通讯时,首先把 RAS 线设置低电平,此时 SDRAM 内部的“行地址选通器”被选通,地址线 A[12:0] 表示的地址会被输入到“行地址译码及锁存器”中,作为存储阵列中选定的行地址,同时地址线 BS[1:0] 表示的 Bank 也被锁存,选中了要操作的 Bank 号;接着控制 CAS 线为低电平,此时内部的“列地址选通器”被选通,地

2022-03-08 09:23:42 825

原创 RT启动流程

BootROM 出厂Bootloader 不可修改 Bootloader FUSE OTP memory 可以烧写一次的储存区域。启动需要的配置信息就可以存储在里面Bootable image 相当于stm32的bin文件里面要包含 FDCB, IVT,BD, DCD,CSF等,其中IVT和BD包含了image的目标地址和总长度boot选项1.Serial Downloader 串口或usb2.Boot From Fuses 有两种选项第一种为BootROM会根据FUSE...

2021-10-29 11:00:12 749

转载 usb基本概念(1)

来自b站UP:sakumisu的usb课程0、USB简介标准USB有四根线,OTG中多了一根身份识别(ID)线。USB在低速和全速模式中,采用电压传输模式,高速中,采用电流传输模式。usb2.0支持3种传输速度;低速1.5Mb/s,全速12Mb/s,高速480Mb/s,实际速度小于这个值。1、USB设备速度识别高速设备连接时候需要以全速速率,并且之后断开上拉电阻(一般由软件开关控制),才能识别出高速。2、USB信号状态3、USB连接...

2021-10-29 10:03:50 1946

原创 汇编语言学习笔记复习用

首先了解栈(stack)和堆(heap)栈(stack)空间,用于局部变量,函数调时现场保护和返回地址,函数的形参等。堆(heap)空间,主要用于动态内存分配,也就是说用 malloc,calloc, realloc 等函数分配的变量空间是 在堆上堆栈指针寄存器Cortex – M7/M4/M3 处理器拥有 R0-R15 的通用寄存器组。其中 R13 作为堆栈指针 SP。SP 有两 个,但在同一时刻只能有一个可以用。主堆栈指针(MSP):这是缺省的堆栈指针,它由 OS 内核、异常服务

2021-07-31 17:23:46 801

原创 电机学习笔记 stm32编码器模式

M法这种方法是在一个固定的定时时间内(以秒为单位),统计这段时间的编码器脉冲数,计算速度值。设编码器单圈总脉冲数为 C,在时间 T0 内,统计到的编码器脉冲数为 M0,则转速 n 的计算公式为:公式中的编码器单圈总脉冲数 C 是常数,所以转速 n 跟 M0 成正比。这就使得在高速测量时 M0变大,可以获得较好的测量精度和平稳性,但是如果速度很低,低到每个 T0 内只有少数几个脉冲,此时算出的速度误差就会比较大,并且很不稳定。也有一些方法可以改善 M 法在低速测量的准确性,上一节提到的增量式编码

2021-07-01 23:08:10 2756 1

原创 【踩坑】 a value of type “int“ cannot be assigned to an entity of type “TaskHandle_t“

在freertos中创建了一个静态任务,发现代码报红编译过后错误,报main.c(185): error: #513: a value of type "int" cannot be assigned to an entity of type "TaskHandle_t"大概意思是不能转换为TaskHandle_t,不能返回啥的经过排查FreeRtos.h第777行代码#ifndef configSUPPORT_STATIC_ALLOCATION /* Defaults to 0 fo

2021-06-16 09:38:10 7938 3

原创 电机学习笔记 无刷电机控制6步换相

无刷电机一般是三相这里控制电机靠的是三相六臂全桥电路。注意不能同侧导通,那就短路了,整个控制过程就是通过霍尔传感器的状态,判断在那一个位置,后按电机旋转真值表来控制。使用 PWM 控制直流无刷电机的策略包括PWM-ON、ON-PWM、H_PWM-L_ON、H_ONL_PWM 和 H_PWM-L_PWM。这 5 种控制策略,均是电机处于 120° 运行方式下进行的这 5 种调制方式为:PWM-ON 型。在 120° 导通区间,各开关管前 60° 采用 PWM 调制,后 60° 则恒通。

2021-06-03 09:49:40 19632 12

原创 电机学习笔记 ADC dma 电流电压采集

分析在电机驱动电路中串入一个 0.02Ω、2W 的采样电阻,将电流信号转换成电压信号,再经过隔离运放放大 8 倍后差分输出,使用普通运放将差分输出转换成单端输出给 STM32 的 ADC 采样通道。从上图中我们可以知道是一个负反馈电路反馈:将输出信号的一·部分或全部通过反馈网络引回到输入端的过程反馈网络:一般是阻容元件看是否存在反馈:结构,输入端与输出端有没有一个反馈网络就是有没有阻容元件连接反馈的极性:采用瞬时极性法负反馈对放大倍数起到了限制作用,也增大了放大电路的稳定性,

2021-05-30 17:12:32 11121 3

原创 电机学习笔记 h桥与自举电路

H桥简介H桥是一个典型的直流电机控制电路注意不能同侧mos管导通,对角导通电机就开始转动这里我们先说mos管mos管mos管它分为N沟道和P沟道两类,其中每一类又可分为增强型和耗尽型两种以上是N沟道和P沟道MOS管的符号图,G:栅极;S:源极;D:漏极。N沟道的电源一般接在D,输出S,P沟道的电源一般接在S,输出D。增强耗尽接法基本一样。我们这里关注重点参数VDSS(耐压值)要看datasheet耐压值多少,VCC打八折RDS 焦耳j=i的平方*R 如果RDS比较小,发热量

2021-05-29 11:05:39 7290

原创 电机学习笔记 输出比较

一、输入比较简介输出比较就是通过定时器的外部引脚对外输出控制信号,有冻结、将通道 X(x=1,2,3,4)设置为匹配时输出有效电平、将通道 X 设置为匹配时输出无效电平、翻转、强制变为无效电平、强制变为有效电平、PWM1 和 PWM2 这八种模式,具体使用哪种模式由寄存器 CCMRx 的位 OCxM[2:0]配置。其中 PWM 模式是输出比较中的特例,使用的也最多当计数器 CNT 的值跟比较寄存器 CCR 的值相等的时候,输出参考信号 OCxREF 的信号的极性就会改变,其中 OCxREF=1(

2021-05-28 23:11:45 1290

原创 电机学习笔记 输入捕获

一、输入捕获简介输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用的有测量输入信号的脉宽和测量 PWM 输入信号的频率和占空比这两种。输入捕获的大概的原理就是,当捕获到信号的跳变沿的时候,把计数器 CNT 的值锁存到捕获寄存器 CCR 中,把前后两次捕获到的 CCR 寄存器中的值相减,就可以算出脉宽或者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期,就会发生溢出,这个我们需要做额外的处理。输入捕获一般应用在两个方面,一个方面是脉冲跳变沿时间测量,另一方面是 PWM 输入测量

2021-05-28 19:26:31 3596 4

原创 电机学习笔记 pwm互补输出

一、互补输出简介定时器的PWM互补输出,用在驱动器、逆变器方面。主要是用在全桥MOS管的控制上。如下图,如果MOS管相同,PWM不反向的话,势必造成两个MOS都导通。相当于电源和地都直连死区时间另外,这里还涉及到一个概念,死区时间。由于两个MOS管的参数不一定完全相同,关断速度不一样,可能有那么几个us 或者MS 是上一个管马上要关闭,下一个已经打开了,造成了两个MOS都打开的短暂现象,所以一般需要加个死区时间。死区时间计算TIM_BDTRInitStructure.DeadTime =

2021-05-28 14:17:44 15988

原创 Linux 浅薄的认知笔记

Shen脚本shell脚本是个纯文本文件,命令从上而下,一行一行的开始执行。shell脚本扩展名为.sh。shell脚本第一行一定要为:#!/bin/bash表示使用bash。交互式shell脚本read。read命令说明数值计算注意等号不能有空格test命令test命令用于查看文件是否存在、权限等信息,可以进行数值,字符,文件三方面的测试。&&和||命令:cmd1 && cmd2 当cmd1执行完并且正确,那么cmd2开始执行,如果cmd

2021-05-06 15:43:50 133 1

原创 关于makefile

Makefile 规则格式命令列表中的每条命令必须以 TAB 键开始,不能使用空格! 目标…... : 依赖文件集合…… 命令 1 命令 2 ……Make 的执行过程:1. make 命令会在当前目录下查找以 Makefile(makefile 其实也可以)命名的文件。2. 当找到 Makefile 文件以后就会按照 Makefile 中定义的规则去编译生成最终的目标文件3. 当发现目标文件不存在,或者目标所依赖的文件比目标文件新(也就是最后修改时间比目标文

2021-05-05 20:54:42 227

原创 can协议学习笔记

can概念与 I2C、SPI 等具有时钟信号的同步通讯方式不同,CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线。闭环总线网络CAN 物理层的形式主要有两种, CAN 通讯网络是一种遵循 ISO11898 标准的高速、短距离“闭环网络”,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个“120 欧”的电阻开环总线网络标准的低速、远距离“开环网络”,它的最大传输距离为 1km,最高通讯速率为

2021-04-29 11:52:40 1931

原创 stm32 HAL经常用的

1.讀按鍵的狀態、int key_Read(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == 0 ) { while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == 0); return 1; }else { return 0; }}2.串口收發注意使用串口中斷要__HAL_UART_ENABLE_IT(&hu

2021-04-18 22:41:08 574

原创 opencv 学习笔记

Mat的概念Android中对图像是用bitmap格式来进行处理,而OpenCV中是采用Mat格式进行处理。所以我们在Android中使用OpenCV也要将Bitmp转化为Mat格式。Mat类用于表示一个多维的单通道或者多通道的数组。能够用来保存实数或复数的向量、矩阵,灰度或彩色图像,立体元素,张量以及直方图。简而言之, Mat就是用来保存多维的矩阵的。Mat对象中包含了图像的各种基本信息与图像像索数据。Mat是由头部与数据部分组成的,其中头部还包含一个指向数据的指针。我们把Mat可以视作就是图像矩阵。.

2021-02-17 20:31:03 633

原创 SPI学习笔记

了解spi之前,EEPROM和flash的区别,都是rom(掉电后不丢失),EEPROM位读写0或1,flash以块为单位读写,也可以读任何一个字节,但是擦除按块擦除。spi优点一主多从同步通信(要求发收双方具有同频同相的同步时钟信号)高速全双工SPI总线是一种4线总线,通常由一个主模块和一个或多个从模块组成,SPI是一个环形结构,通信时需要至少4根线(事实上在单向传输时3根线也可以)MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)(百度上的)∴片选可编

2021-02-15 20:03:05 1063

原创 iic接口

I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。看iic 时序看芯片手册里面有 DIGTAL INTERFACE 数字接口时序启动信号时钟线SCL为高电平时,数据线SDA从高电平转到低电平时序停止信号停止信号与启动信号相反时钟线SCL为高电平时,数据线SDA从低电平转到高电平开始传输数据iic数据都是8位,主设备会传送一个 7 位的 Slave 地址,并且

2021-02-12 18:49:01 1144

原创 stm32 adc

adc工作方式1.查询模式(阻塞)2.中断模式3.DMA模式查询模式1.启动adc2.等待EOC标志位3.读寄存器值HAL_ADC_Start()HAL_ADC_Stop()HAL_ADC_PollForConversion(); //查询转换标志位HAL_ADC_GetValue()获取 ADC的值float getAdcValue(void) { HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc

2021-02-12 15:04:03 214

原创 stm32 定时,互补输出,输入捕获,输出比较

Prescaler:定时器预分频器设置,时钟源经该预分频器才是定时器时钟,它设定 TIMx_PSC寄存器的值。可设置范围为 0 至 65535,实现 1 至 65536 分频。• CounterMode:定时器计数方式,可是在为向上计数、向下计数以及三种中心对齐模式。基本定时器只能是向上计数,即 TIMx_CNT 只能从 0 开始递增,并且无需初始化。• Period:定时器周期,实际就是设定自动重载寄存器的值,在事件生成时更新到影子寄存器。可设置范围为 0 至 65535。 • ClockDiv

2021-01-20 19:38:38 2467

原创 PID学习记录

pwmT为周期,Ton为导通时间,Toff为关断时间。Ton+Toff=T;输出电压Uout=(Ton/T)Upid1.PPout=KpEk2.IIout=Kp*Sk //[输出信号大小] 正比于 [过去总体偏差值]Iout:比例控制器的输出。Kp:增益系数。Sk:历史偏差之和即历史上的整体偏差情况如果都是不达标的,那么我积分控制器就会有一个正的输出量使得你输出继续增强;若你历史上整体偏差情况是超标的,那么我就输出一个负的输出量使你降低输出,甚至输出负值,即如果是温度控制系统,

2020-11-13 09:41:46 522

原创 Invalid ROM Table的解决方法

今天烧录stm32的时出现了Invalid ROM Table的问题,经过网上查询是频率不对的问题把超频了导致stm32被锁了,无法烧录出现Invalid ROM Table的问题。解决方法修改system_stm32f4xx.c,system_stm32f4xx.c里的ppl频率修改为正确的修改boot,这是网上的方法,我那个stm32是个小车,并没有boot与boot1引出,按住复位键使用STM32 ST-LINK Utility来擦除flash,在烧录,使用jlink解锁也可以。...

2020-09-20 15:03:16 1817 1

原创 【踩坑】TabLayout 默认选中无效

写一个demo时发现,其中TabLayout作为底部导航栏,默认选中竟然无法回调onTabSelected,而选择其他Position时,可以正常回调回来原因是因为我们是先addTab这个时候还没有绑定回调方法,所以应该是先是设置回调,而后addmTabLayout = findViewById(R.id.tab_layout); mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListen

2020-09-01 09:56:48 1537

原创 stm32学习笔记 RTC

灰色部分为纽扣电池供电下的后备区域相应的寄存器的值也能保存,其他部分为其他供电默认是停止访问的如果要使用需要设置相关寄存器(1)RTC 备份寄存器的写访问:1)通过设置寄存器 RCC_APB1ENR 的 PWREN 位来打开电源接口时钟2)电源控制寄存器(PWR_CR)的 DBP 位来使能对 RTC 及 RTC 备份寄存器的访问。RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能 PWR 时钟PWR_BackupAccessCmd(

2020-09-01 06:00:09 669

原创 stm32学习笔记 通用定时器

STM32F103C8T6处理器:高级定时器: TIM1三个通用定时器: TIM2,TIM3, TIM4没有基本定时器stm32f4有 14 个定时器(具体看手册)重点内容:1.基本定时和计数功能2.输出比较( PWM控制舵机和步进电机)3.输入捕获(测量波形周期,高电平时间)时钟树:因为系统初始化 SystemInit 函数里面已经初始化 APB1 的时钟为 4 分频,所以 APB1 的时钟为 42M,而从 STM32F4 的内部时钟树图(得知:当 APB1 的时钟分频数为 1

2020-09-01 03:51:27 370

原创 51 矩阵按键

电路图简单1.void scanButton(void) { unsigned char temp0=0,temp1=0,temp2=0; P1 = 0xf0; //1111 0000 if(P1!=0xf0) { //当按下时电平发生改变 如1110 0000 delay(20); temp0 = P1; //保存行结果 P1 = 0x0f; // 电平反转 0x0f 0000 1111 if(P1!=0x0f) { //当按下时电平发生改变 如00

2020-08-26 15:43:05 299 1

原创 stm32学习笔记 DMA

DMA简单来说就是可以减轻CPU工作量通道的选择与你要用的外设有关例子:dma初始化void DMA_ConfigurAction(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 ,ENABLE); //时钟使能 DMA_InitTypeDef DMA_InitStructure; DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40013804; //填寄存器地址 // 寄存器地址

2020-08-25 18:49:34 231

原创 stm32学习笔记 PWR

PWRSTM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源。当主电源VDD掉电后,通过VBAτ脚为实时时钟(RTC)和备份寄存器提供电源。__WFI(); 为arm内核的指令PWR 函数PWR_DeInit 将外设 PWR 寄存器重设为缺省值PWR_BackupAccessCmd 使能或者失能 RTC 和后备寄存器访问PWR_PVDCmd 使能或者失能可编程电压探测器(PVD)PWR_PVDLevelConfig 设置 PVD 的探测电压阈值PW

2020-08-24 21:23:01 8559

原创 stm32学习笔记 串口

usart并行通信(有好多根线)和串口通信(一根线)同步通信:收发双方有clk同步信号线约定好的异步信号:只有一根线,没有clk防止信号紊乱1.数据位要确定,有无奇偶校验,停止位长度,波特率如果要通过串口要接pc机,需要rs232的电平转换芯片,usb为ttl转换芯片1.使能gpio2.复用3.USART_Init例子:#include "bsp_uart.h"#include "stdio.h"void Uart1_NVIC_init(void) { NVIC_Prio

2020-08-21 23:41:16 278

原创 stm32笔记 看门狗

独立看门狗 IWDGIWDG 使用lSI低速内部时钟寄存器IWDG_KR key 15:0软件必须间隔写入0xAAAA,否则看门狗复位写入0x5555 访问 IWDG_PR() 和 IWDG_RLR(重装载)写入0xCCCC 启动看门狗库函数IWDG_WriteAccessCmd 使能或者失能对寄存器 IWDG_PR 和 IWDG_RLR 的写操作IWDG_SetPrescaler 设置 IWDG 预分频值IWDG_SetReload 设置 IWDG 重装载值IWDG_ReloadC

2020-08-18 21:58:05 176

原创 stm32笔记 SysTick

STK寄存器 24位具体看手册STK_CTRL 控制第0位 设置为1使能第1位 设置为1产生异常第2位 时钟源选择 有两个 0:AHB(72mhz)/8 = 9mhz 1: 72mhz第16位 标志位是不是为0STK_LOAD 重装载值72000000/1 x 72 = 1000000/1 = 1us1us * 1000000 = 1sSTK_VAL 当前计数值 为0会重装载库函数SysTick_Config() 配置systick返回值 成功为0 失败为1例子:

2020-08-18 13:47:46 169

原创 stm32笔记 EXIT

中断中断是中断,异常不一定是中断,中断包含在异常优先级 具体看中断向量表在startup_stm32fxxxx_md.s(DCD:数据定义( Data Definition )伪指令一般用于为特定的数据分配存储单元)中断函数在stm32f10x_it.c,可用startup_stm32fxxxx_md.s跳转过去外部中断对应NVIC 向量中断控制器具体参考手册Table 272. NVIC_IRQChannel 值NVIC_IRQChannel 描述WWDG_IRQChannel 窗

2020-08-17 13:11:07 396

原创 stm32笔记 gpio

使能时钟RCC_APB2PeriphClockCmd使能或者失能 APB2 外设时钟具体参考芯片手册RCC_APB2Periph_AFIO 功能复用 IO 时钟RCC_APB2Periph_GPIOA GPIOA 时钟RCC_APB2Periph_GPIOB GPIOB 时钟RCC_APB2Periph_GPIOC GPIOC 时钟RCC_APB2Periph_GPIOD GPIOD 时钟RCC_APB2Periph_GPIOE GPIOE 时钟RCC_APB2Periph_ADC1 A

2020-08-17 10:40:20 561

原创 AndroidSqlite

既然要用到数据库那当然也要了解一下安卓的文件存储,首先看文件存储的代码文件存储@Override public void onClick(View v) { switch (v.getId()) { case R.id.button: Log.d(TAG, "onClick: 1"); save("我"); break; case R.i

2020-08-11 08:22:20 2455

原创 bypass-wts-waf

今天遇到个站有点意思,环境asp.net,waf是wts—waf,有个链接存在sql注入过waf注入的整个过程非常顺利,以下是过程?id=6532+and+1=1 //用+号是为了绕过waf?id=6532+and+1=2网页出现异常说明存在注入。然后ORDER BY 25 查询字段,超过25出现异常说明字段数为25+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25+from+admin

2020-08-11 08:20:42 1441

原创 c语言指针

指针指针的作用可以通过内存地址来控制变量,定义指针时*p = &变量名,指针会在计算机内存分配4个字节存放这个变量的首地址,*p叫指针变量指针的用法#include <stdio.h>int main(){ int a = 20; int *p; p = &a; *p = 25; printf("%d \n",a); return 0;}此时输出为25把*p可以当作a进行赋值操作;在数组中的用法:#include <stdio.h

2020-08-11 08:19:07 126

原创 Fragment

fragment我的理解就是有一个小的activity,也可包含布局也有生命周期,可嵌入到activity中静态添加在main布局添加fragment标签,这里的android:name="com.example.xyz.fragmentview.FragmentOne"这里的为继承Fragment的类<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:an

2020-08-11 08:17:41 136

原创 sqlinject

普通注入header('content-type: text/html; charset=utf-8');$id = $_GET['id'];$conn = mysqli_connect('localhost',"root",'root','test');$sql = "select * from user where id={$id}";$result = $conn->query($sql);if($conn->connect_error) { die('数据库连接失败:' .

2020-08-11 08:15:36 135

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除