自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 示波器使用

按下CH1 交流耦合就是把直流分量减去 (电容隔直通交) 大部分都是使用直流耦合 如果要看电源的纹波 就要使用交流耦合。右下角是测试信号 第一个钩子是测试信号 第二个钩子是GND (要看测试信号的时候可接可不接)这样形成的环就很小 但是接地弹簧也是要碰到GND的 记得表笔需要跳到X10档。这里就是表示示波器纵轴的一个小格是1v 扭动幅值调节按钮 可改变纵轴量程。触发边缘类型改为 下降沿 触发方式改为单次 即可截取到按键按下的波形。扭动红色的按钮 移动绿色的纵轴 绿色的纵轴是 光标A。

2024-06-11 15:07:03 154

原创 物联网小demo

调用DHT_Read()函数 注意这里的的Read函数是放在handle中的 在while循环中这个User_handle是一直在被调用的 如果要持续读取温湿度需要放在while()循环中 结构体赋值是为了上传到机智云平台 sprintf函数是将 数据转化为字符串 所以字符串的形式打印在oled上 (注意需要先定义一个长度为30的缓冲区 OLED_BUFF)35表示从两个字之后开始显示(一个字的占用的像素点是16 两个是32 )2表示第二行 oled-buff是缓冲区 字符的大小是16。

2024-05-05 20:09:02 1247

原创 电阻 电容 电感

首先需要明确Q的概念 是无功功率/有功功率 无功功率就是电感储存的能量 有功功率就是损耗掉的能量 在频率一定的情况下 首先在电路工作的时候 电路的频率是远远小于电感的谐振频率的(设计)那么电容的阻抗无穷大相当于断路 然后Q值化简为上图的公式 就和频率f有关 所以在频率一定的情况下 Q值越高 那么有功功率(损耗功率就会越小) 损耗的功率不完全是直流电阻DCR的消耗 还有如上图电阻的消耗。当要用电感进行滤波的时候 需要电路的频率小于电感自谐振频率的十分之一 这样电感约等于理想电感。

2024-05-03 23:41:25 596

原创 温湿度上传数据到云平台机智云

硬件连线 需要两个CH340(USB转TTL模块) 一个CH340模块的TX和RX分别于esp8266的RX和TX连接 3V3和GND也连接 另一个模块只需要连接一根线 就是GND连接到ESP8266的IO0上 注意!一定要先连接IO0的CH340模块连接到电脑上 在连接另一个CH340模块 在esp8266上电前 先把IO0口拉低 让esp8266进入代码烧写模式。如果烧写固件后一直连不上手机的app 建议换个固件烧写 烧写后esp会一闪一闪 表示烧写成功。传感器的初始化就放这里面。

2024-04-27 16:08:01 197

原创 蓝桥杯单片机 小蜜蜂

对应的IO口为P04 和P06 首先需要打通 D4 和 Q4 D6和 Q6 那么需要LE就是Y5C为高电平 那么就需要Y5为低电平 Y5和WR均为低电平 然后通过以一个与非门 输出Y5C为高电平 那么138的C B A分别为 1 0 1。当Y4为低电平 WR也为低电平 通过这个或非门 就会输出高电平 Y4C为高电平 D1和Q1就通 其他类似 依次往下推。这么记 只要C B A满足了上面的值 对应输出的Y就是低电平 低电平有效 如C 1 B 0 A 1。当Y4C就是 LE输入高电平就是有效。

2024-02-28 17:42:11 578

原创 oled显示汉字字体 形状 使用

在单片机内部开一块buffer 也是1024kb的对应着oled屏幕 相当于一块画布 然后可以调用pal库的接口对oled画线等图案。

2023-12-28 21:12:10 480

原创 pal库 IIC

从倒数第三个数据开始 前N-3个数据都是一样的读取到缓冲区 然后到倒数第三个和倒数第二个数据进入RDR寄存器和移位寄存器 两个寄存器都满了然后标志位BTF为1 把两个数据都读取出来然后最后一个数据在传输进来的时候写入NCK和停止位结束数据的传输。查询ADDR标志位查看是否寻址成功 如果寻址成功然后再查询AF标志位如果也等于1 那么说明寻址失败了 然后发送停止信号 结束 (往标志位STOP中写值发送停止信号) 等待总线空闲返回错误。CR寄存器的一个标志位 来控制发送的是ACK还是NAK信号。

2023-12-21 22:30:15 567

原创 IIC使用方法

iic是stm32芯片上的一个外设 有两个外设接口 其中iic1可以重映射 iic2不可以重映射。

2023-12-21 20:18:45 787

原创 I2C通信协议

串口通信的缺点 就是一个串口只能连接一个设备无法连接多个设备总线的概念一个串口只能连接一个模块 TX这条路只能发送数据据 RX这条路只能接收数据 效率十分有限 但是总线(共享通信链路)相当于搭建了一条马路 能够进行多向数据的接收和发送I2C总线两根线分别为SDA(数据线) 和SCL(时钟线)SCL负责传递时钟信号 发送一个个脉冲信号 (打节拍) SDA负责发送数据主机与从机主机的职责当从机1需要发送数据 从机2也要发送数据 会发生冲突 需要主机来进行管理。

2023-12-12 22:47:15 413

原创 设备间的指令通信

接收参数的函数接口的第二个参数就是 0 或者1 比如指令SetBlinkParam 10 1000 第一个参数就是10 所以在调用函数接口时的参数填0表示第一个参数 第二个参数1000 就填1表示第二个参数 注意初始化的OnTime 和OffTime要和函数接口的参数类型一直 都是int32 类型。因为编解码器需要从串口处接收字符串命令 所以初始化编解码器之前需要先初始化一个串口 初始化编解码器第一个参数就是初始化串口的句柄。使用这个库函数 首先需要初始化字符串命令编码器 调用第一个接口。

2023-12-09 22:02:21 412

原创 字符串指令集

第二个函数接口就是 atoi 就是传入一个字符 就返回这个字符对应的数字 当提取玩指令名称后 ptr来到了图中位置 此时ptr指向一个字符 右上角的程序首先声明了两个指针变量 用来接收字符串指令的两个参数 然后第一个指针指向ptr 也就是第一个字符 然后去搜寻剩下字符串的空格 调用函数strchr(ptr,‘ ’ )使得ptr指向剩余的字符串中的空格 ptr位置如图所示。收到指令后把字符串进行解析 分别是指令的名称和后边的两个参数 首先要分隔开然后把对应的数据存储在对应的变量里面。

2023-12-08 22:37:40 394

原创 设备间的指令通信

无论是什么情景都需要类似于主机给从机发指令 从机接收完成任务发送数到主机 这个过程 所以指令的学习很重要单字符指令单个字符 如果通过串口给小车发w就是前进一米dw就是右转前进一米 类似与这样 但是也有缺陷 就是如果想让小车前进0.5米就无法实现字符串指令如walk forwa 1就是表明走 前进 一格 turn left 向左转 通过发送不同的字符就可以发送不同的指令但是效率有点低二进制指令。

2023-12-07 23:00:28 935

原创 USART的PAL库编程 周期性任务的实现方法

总结一下我们之前使用中断的方式来进行数据的发送和接收 如果收到数据数据在RDR寄存器中 RXNE标志位就从0到1触发中断 进入中断服务函数 把数据缓存在队列中 然后在到进程函数中断接收数据函数中进行出队处理。PAL_USART_ReadLine 在使用这个函数接口之前先要设置行分隔符的方式 行分隔符就是\r \r\n 等多种分隔行 在初始化的时候调用高级参数。发送数据就是把中断关闭(标志位TXE的寄存器TDR为空的时候为1会误触发中断所以要关闭)要发送的数据进行入队然后打开中断 IDR寄存器中还是没数据。

2023-12-03 23:39:36 533

原创 中断方式的数据接收

直接触发中断 进入中断服务函数 然后在中断服务函数里进行出队的操作 第一个字符 出队一次返回值为成功 然后写入TDR寄存器发送出去 (在写入 TDR寄存器的过程中 标志位TXE为0 然后发送完成第一个字符 TDR寄存器又为空标志位TXE又为1 再次触发中断 进入中断服务函数发送第二个字符)直到全部字符(数据)出队完成 就在if的括号内返回错误 (无数据返回错误) 然后就关闭中断。一开始先关闭中断 让要发送的数据入队 然后开启中断 因为TDR寄存器本来就为空 所以标志位TXE就为1。

2023-12-03 21:38:51 567

原创 中断方式的数据接收2

当RXNE每次由0变为1就表示有一个数据传入 (一个字符的传入) 第一个字符为H 存入数组a[0] 接着接收剩余的字符 直到满足条件 数组a的倒数第二个位存放的是字符\r 最后一个位置存放的是字符\n 就发送数据 同时清空数组。当使用中断方式接收数据的时候 一般有两种方式 数据处理的时间较短可放在中断服务函数内处理(就地处理) 第二种就是数据处理时间较长需要缓存数据来延时处理。在发送数据的时候因为时间过长 无法做到瞬间处理 如果这时候有数据传输进来就会造成数据的丢失 所以不能使用就地处理的方式。

2023-12-03 15:19:15 431

原创 oled的使用 动态的变量 51

第一个参数和第二个参数是x轴和y轴的位置 第三个参数是要显示几个数字 第四个参数是数字的显示大小。如果要要显示的变量是会变化的就要放在while中 就如上面的shownum。然后具体要显示的汉字利用取字模软件生成代码粘贴到头文件内。第三个参数是要显示的字符 第四个参数是字符的大小。要显示几个字就调用几个showchinese。这个头文件 然后生成的代码放在这个框中。显示数字就调用shownum。源码均在IIC手写程序中。外部中断实现变量加一。

2023-11-24 23:24:20 585

原创 中断方式的数据接收

回顾之前的代码之前的代码是 等待标志位RXNE位为1才有数据 进而读取数据存放在变量c中 再根据c变量的数据是为0还是为1进而编写灯亮灭的代码 if语句但这样的代码明显不符合裸机多任务的编程模型 因为在while中为进程 进程执行的时间不能大于5ms 但是while(RXNE==0)这条语句的执行时间是由发送数据的一方决定的 当发送方1s后发送数据 这条语句就执行1s 完全超出了裸机多任务模型的时间。

2023-11-23 08:50:37 1932

原创 USART的标准库编程

使用USART与计算机通信电脑上只有usb端口 没有TX 和RX需要一个USB转TTL电平模块来实现通信芯片C8T6中只有三个UASRT 选其中一个UASRT来通信即可 那么如何定位那个USART的TX 和RX引脚呢?方式1 查找最小系统板引脚分布图查找USART1的引脚 RTS CTS是硬件流控 CK引脚是同步时钟 (因为串口用的是异步通信所以不用到) 紫色绿圈圈起来的是复用 当有IO冲突时就可以重映射到别的引脚上方式2 查找“复用功能重映射表”

2023-11-21 23:22:52 474

原创 UASRT(2)

TC标志位为1时需要TDR寄存器为空 并且移位寄存器也为空 才使得TC标志位为1 当数据进入TDR 然后进入移位寄存器中处理一段时间才能全部把一个字节的数据发送完成 当数据还在移位寄存器发送的时候 TXE为1 (IDR寄存器为空) 当移位寄存器传输完数据后 移位寄存器也为空位状态 然后TC也为1 当标志位TXE和TC都为1就表示一个数据的传输完成。一共就有5个1 在数据的传输中有错 数据出错 接收方的SR状态寄存器中的RXNE位由0变为1表示接收到了数据 PE位为1表示接收到的数据错误。

2023-11-20 12:19:54 93

原创 USART(1)

单片机上有的许多的外设 单片机通过这些外设实现特殊的功能 如果单片机想要和蓝牙模块实现数据的传输那么就也需要单片机有串口模块来和蓝牙模块的串口进行连接 相互传输数据 在单片机上的串口就叫USART USART就是单片机上的外设 来实现串口之间的通信功能USART名字的含义一般用的异步模式比较多 最右边的UART就是不支持同步的模式 仅支持异步模式 RTS和CTS是流控信号的发送和接受 (串口的笔记有讲) RT表示可发送和接受数据。

2023-11-17 22:35:06 335

原创 串口通信

在串口中 用0和1表示高低电平VCC供电 设备A给设备B供电 如果各自都有供电的模块就不需要连接这个线 GND的连线是为了获取相同的电压基准 因为有时候获得电压各自判断的标准不一样 可能获得不一样的电压 如果想A发送数据给B那么蓝线不需要连接 如果想B发送给A那么绿线不需要连接 下面的图是一个是一个实列 蓝牙和电脑连接(电脑只有USB接口)

2023-11-17 19:30:02 180

原创 单片机编程原则

把三个任务分别分为一个一个的片段 然后先执行任务一的第一个切片 执行第二个任务的第一个片段 执行第三个任务的第一个片段 然后再返回执行第一个任务的第二个片段 接着循环 达到右边彩色条纹的效果 如果把任务分足够多的片段 执行的速度够快 就可以认为三个任务并行执行。第一个阶段是初始化 GPIO EXTI等外设和其他的初始化 第二个阶段是任务的执行注意在任务的执行中不能调用延时函数PAL_Delay 就是让CPU在多个任务中切换让三个任务达到同时并行执行 第三个阶段是中断函数执行阶段 也不能调用延时函数。

2023-11-16 18:00:27 124

原创 EXTI (2)

增强版实验简介EXTI5和EXTI9共享一个中断源 下面的类似 EXTI0到4各自拥有一个中断源改变引脚 PA0和PA1改变为PA5 和PA6EXTI的重映射之前是把PA0映射到EXTI0 PA1映射到EXTI1上 现在是要把PA5和PA6分别映射到EXTI5和6上EXTI进行初始化NVIC初始化编写中断函数。

2023-11-14 00:00:17 399

原创 EXIT(1)

EXTI是片上外设 NVIC是cpu内的外设 回忆起之前的GPIO和AFIO 我们是如何检测按键按下的 我们是一直用while循环读取IDR寄存器的对应位置的值 一直检测判断按键是否被按下那么是否有第二种方式检测按键是否被按下了呢?通过EXTI 当EXTI检测到按键的电平发生变化 就会触发一个中断 送到NVIC进行相应的处理 就会触发相应的中断函数。

2023-11-13 21:00:57 229

原创 按键编程 pal库和标准库

创建了两个变量 用来捕捉按键的状态 先让两个变量都为1 previous和current都为1 (按键没按下) 然后让current去捕捉按键的状态通过读gpioA的pin0 如果为0就是按键按下 如果为1就是按键没按下 然后赋值给current 如果current和previous相等就是按键没按下 如果相等就是按键按下了 那要在按键按下的瞬间改变LED的亮灭状态 即按键松开瞬间(在之前按键已经按下)if语句嵌套 第二个if为按键松开瞬间改变LED的亮灭状态。按键按下就亮 按键松开就熄灭。

2023-11-12 16:22:26 763

原创 STM32 LED编程 GPIO的初始化(标准库)

实验的电路图介绍实验的电路图类似于开漏接法 要初始化GPIOC接口标准库的模板GPIO的标准库编程接口GPIO引脚的初始化GPIO作为片上外设 每一个片上外设使用前一定要使能时钟 为什么要使能时钟?时钟是啥。

2023-11-10 22:53:31 2030

原创 中断 NVIC的概念和原理

中断: 由于中断源的触发,常规程序被打断, CPU转而运行中断响应函数,而后又回到常规程序的执行,这一过程叫做中断。中断优先级的概念中断的意义和作用中断处理的过程和术语STM32 GPIO外部中断简图从反向介绍。

2023-11-09 00:01:23 799

原创 使用stm32cubeMX新建一个工程

这里用的是f407系列 系统时钟为168mhz。新建工程 (在主界面) 然后搜索芯片的型号。

2023-11-07 14:59:38 28

原创 GPIO AFIO

其实GPIO就是类似于51单片机的IO口 有采集和控制的作用翻转指的是高电平到低电平 或者低电平到高电平1.不能接5v的电压 接了就烧2.coms端口和ttl端口的识别。

2023-10-31 20:04:35 1675 10

原创 STM32 system文件夹介绍

这些函数都是在sys.c中实现 在sys.h中声明 int是中断(interrupt)的缩写开启所有中断 给中断使能 enable 关闭所有中断 给中断失能 disable (就是一句话使用外设前要给中断使能)同样delay也是有着delay.C 和delay.h来实现和声明函数 在这里OS不做介绍systick工作原理注意实在芯片的内核里 24位表示能记下2的24次方的数字 当来一个时钟信号(一个方波)这个滴答定时器就减一 (递减)上图是两个时钟信号。

2023-10-29 22:15:21 655

原创 STM32配置时钟系统

配置系统时钟。

2023-10-28 22:39:57 51

原创 STM32时钟系统

每个振荡器都对应着右边的图片 外部就是芯片外部的晶振(接入芯片内部) 内部振荡器就是在芯片内部的HSE 和HSI都是高速的振荡器 外部的可以提供4-16MHZ的晶振 内部可提供8MHZ的晶振 SYSCLK是系统的内部时钟 他的晶振是72MHZ HSE和HSI通过锁相环使得晶振频率增加到72MHZ。

2023-10-25 22:47:09 148

原创 stm32 基础知识 寻址范围 寄存器映射

存储器指的是额可以存储数据的设备(FLASH SRAM) 本身没有地址信息 对存储器分配地址的过程称为存储器映射如星忆公司生产的芯片(可以理解为是SRAM的升级) 19根地址线 就是2的19次方个可以访问的地址16根数据线 每个地址可以写入两个字节 总共芯片的容量就是 1mb存储器映射存储器功能划分 (F1芯片为例)第一个Block 0 存放着代码 也就是FLASH (ROM) FLASH就是一个存储器 映射到Block 0 (这个地址模块上)其实学习stm32就是学习外设 主要是前三个地

2023-10-22 13:28:47 576

原创 stm32学习 4 stm32的基础知识(系统架构)

详细的系统构图 找到总线矩阵(中间圈起来的)12个总线主控制器(左边)8个总线从控制器 再看内核 I-Cache 和D-Cache是内核缓存数据和指令的 如果内核想要读取数据和指令需要通过总线矩阵来访问 FLASH和SRAM 有可能需要等待 但是把数据和指令缓存到内核就保证了内核的急速运行 再看AHB1 216MHZ 可以给FLASH 提供时钟 还可以给多个设备提供时钟 (同样的颜色)APB2的频率是72mhz(挂载不同的外设 需要不同的工作频率)分为不同频率的时钟总线。

2023-10-18 11:49:14 689

原创 开关电源 (电感式)降低EMI与EMC设 TI公司的原理图设计

搜索器件型号 如(tps5450)点击器件的名字进入 拉到最下面。输入输出电压和输入电压等其他参数 直接生成原理图。右边的红框就是芯片的型号 左边就是参数的输入。同样 mps也有设计电路的功能。TI公司提供了芯片的设计。

2023-10-17 23:00:21 70

原创 stm32学习3 MDK5和下载 编译的一些方法

1是打开查找的按键 2时查找的函数(通常点击要查找的函数系统会默认填上) 3是查找的范围 圈起来的要勾选上。code 就是代码 code=5262就是代码占用的是Flash空间 占用5262个字节。global.prop文件的妙用 (重新安装MDK之后仍然可以保持之前的设置)便于函数的跳转(注意程序编译成功后才会成功跳转) 在程序为编译之前可能跳转失败。只需拷贝i这个文件到新的keil文件夹中即可恢复重新安装前的设置。ctrl+F打开这个界面 第一行是要替换的 第二行是替换掉的代码。

2023-10-16 23:44:41 45

原创 stm32的学习1(初识STM32 看数据手册 最小系统和IO口分布)

JTAG不建议使用 串口一也不建议使用。

2023-10-14 22:39:07 216 2

原创 开关电源1

负压是把输入的电压反向输出 V0=-VI倍压是吧输入的电压双倍输出 V0=2Vi半压 以此类推稳压电路是输入在变化 输出稳定不变 升压降压负压以此类推开关管内置和外置 都有 非稳压的效率高于稳压。

2023-10-07 21:33:02 48

原创 电源大师笔记2

线性稳压器的功率管一般有5种 用mos管组成功率管的电压 都为 Ros(on) *Io。

2023-10-06 17:16:46 60

原创 线性电源基础知识2

总结一下之前的稳压芯片78系列 79系列 (输出的电压是固定的) 如7805 输出的电压就是5v 压差为2.5v 输入的电压 VI<=35v 因为78系列效率太低 如果输出的电流较小 还行 如果输出的电流太大导致发热严重 可能会起火LM317 337 输出的电压可调 压差为3v 输入的电压≤40v。

2023-10-03 23:47:14 56

空空如也

空空如也

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

TA关注的人

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