自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 day14 ADC

模数转换(ADC)是指将以便计算机或数字系统能够处理、存储或传输这些信号。

2025-07-28 17:10:25 248

原创 day13 flash

指的是若干个存储单元的集合,每个存储单元都可以存储若干个二进制数,为了方便的操作存储单元,就为每个存储单元都分配了地址,就可以由于计算机的处理的数据量较大,并且运算速度都很快,就要求存储器的容量更大,并且存取数据的速度更快。

2025-07-24 20:45:18 820

原创 day 12 看门狗外设

特性 独立看门狗(IWDG) 窗口看门狗(WWDG)STM32F4系列的芯片提供的两个看门狗,一个叫做独立看门狗,一个叫做窗口看门狗。两个看门狗的使用流程差不多,但是相比于独立看门狗,窗口看门狗比较难伺候。如果系统“沉默”(未按时发送信号),看门狗会强制复位系统。:系统正常运行时,需定期向看门狗发送信号(通常通过写寄存器或翻转引脚)。独立看门狗原理及特性。窗口看门狗原理及特性。

2025-07-20 22:54:09 293

原创 day11 DHT11传感器采集

ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。◦ 数据传输:每次传输 40 位数据(湿度整数(8位)/小数(8位) + 温度整数(8位)/小数(8位) + 校验和(8位)),高位先发MSB。ADC会将检测到的一段连续的数值,转换为一些离散的数字量,在STM32中,ADC主要转换的对象就是IO接收到的电压。从重量最多的砝码依次与物品比对,若比物品轻则增加砝码,否则更换砝码。位,则保存数据时可以选择保存在数据寄存器的右侧或左侧。若想要计算一个物品的重量,已知当前最大的砝码重量为。

2025-07-19 23:07:27 583

原创 day10 蓝牙 BLE

本章中测试AT指令的电路为:单片机,电脑,蓝牙模块;USART1的中断服务中,将USART1接收到的数据保存到一个变量中,通过USART3发送出去,这样蓝牙就能接收到电脑发送的AT测试指令。USART3中断服务函数同理,收到后通过USART1发送回来,电脑端就可以看到蓝牙的返回信号,进而判断AT指令是否正常写入。出现原因:两个问题都是源于一个原因导致的,即每一个指令后都加一次回车,回车累计较多。下图是蓝牙通过AT指令改名字的测试,注意发送区根据指令要打\r\n,这里直接按回车效果一样。

2025-07-16 17:19:50 148

原创 day9 串口通信

因为硬件平台一般采用TTL电平信号(采用正逻辑电平,+5V等价于逻辑1,0V等价于逻辑0),但是计算机采用RS232电平信号(采用负逻辑电平,-15V~-3V 表示逻辑1,+3V~+15V 表示逻辑0)。,相当于发送数据的同时接收数据,同步通信属于连续串行传输数据,一次只传输一帧数据,相比于异步通信而言,传输效率更高,缺点是时钟必须一致。,异步通信以字符为单位进行传输,在传输一个字符的时候会添加起始位和停止位,通过起始位以及停止位来达到同步的功能。口协议只规定了按照怎样的顺序传输,但是数字量如何转换,

2025-07-14 16:24:18 862

原创 day 8 TIM定时器

TIM6 的时钟频率为 84MHZ,如果想要降低频率,公式:1MHZ = 84MHZ /(83+1),频率就降为 1MHZ,也就意味着 TIM_CNT 寄存器累计计数 1 次的时间是 1us,如果打算利用TIM6 定时 1ms,也就是说 TIM_ARR 寄存器的值应该设置为 1000-1,只要 TIM_CNT == TIM_ARR,// 定时200ms,经过8400分频,8400us数84次,即100us数1次,1ms=1000us,10次即可,200ms 2000次。

2025-04-05 23:34:30 899

原创 Day 7 systick延时

1s (1000000us)振荡 168000000 次,振荡 1 次的周期是 1/168us,也就是振荡 168 次花费 1us。1s (1000000us)振荡 21000000 次,振荡 1 次的周期是 1/21us,也就是振荡 21 次花费 1us。本图,首先从时钟选择开始看处理器时钟是72MHZ,参考时钟是9MHZ所以参考时钟的最大计数是处理器时钟的8倍。可以看到 Systick 定时器的时钟源可以选择内部时钟(168MHZ),或者外部时钟(8 分频之后。

2025-03-31 21:51:19 550

原创 day 6 中断

Cortex-M4 内核一共支持 256 个中断,其中有 16 个内核中断,240 个外部中断,只不过对于STM32F407 系列来说,只用到了一部分,包含了 10 个内核中断(不可屏蔽中断,无法通过软件进行控制)、82 个外部中断(可屏蔽中断,可以通过软件进行控制)。在程序运行的过程中,首先对所有的硬件进行初始化,然后在主程序中写入一个死循环,需要运行的程序按照顺序进行执行,轮询系统是一种简单可靠的方式,一般适用与在只需要按照顺序执行的并且没有外部事件的影响的情况下。//使能外部中断线0。

2025-03-24 16:09:04 656

原创 day 5 寄存器 时钟 堆栈

如果用户开启某个外设的中断,但是没有编写中断服务函数或者中断服务函数名字写错了,就会导致程序一直运行汇编文件中定义的中断服务函数,但是预定义的中断服务函数内部都是空的,所以就会跳转到无限循环、导致程序卡死。晶振的全称叫做晶体振荡器,是晶体(石英)和电子元件组成,晶振有一个非常重要的特性:机电效应(压电效应),一般晶振会提供高度稳定的频率(振荡频率是固定的),一般晶振的频率有 8MHZ、12MHZ、25MHZ、11.0592MHZ...... 晶振的单位是 HZ 频率(单位时间振荡的次数)

2025-03-20 23:41:52 681

原创 day 4-STM32-外设初始化及配置

遇到一个问题:不管是配置上拉输出还是下拉输出都会把我所有灯点亮不知道为什么,用SitBits函数可以选择性熄灭灯。但是核心问题是初始化配置的灯熄灭没有实现。寄存器(register)用于寄存一组二值代码---->>触发器构成。AHB总线(高级高性能总线)APB总线(高级外设总线)2浪费引脚资源,会把EF的9、10、13、14全部打开。触发器:能够存储1位二值信号的基本单元电路。1可以简化使能,跳转后发现可以与操作。解决:理解错了,是若上拉比较弱。SET----1(高电平)

2025-03-18 16:16:02 205

原创 day3-STM32-GPIO

led灯经过的最大电流不能超过10ma(查手册),R=U/I=(3300-300)mv/10ma=300欧姆。1.2代码自动补齐,设置过了但是有时候还是没有补全。点亮四灯时,有PE引脚也有PF引脚。添加时钟使能和Init函数。查对应需要的引脚资源。

2025-03-13 22:14:04 177

原创 day2-STM32文件创建

2、配置工程文件、打开keil软件点击new project创建新的工程,点击后选择开发板所使用的芯片选择芯片型号,选择完毕后会弹出一个框,在其中选择cotex M内核start up启动文件和其他如GPIO接口引脚资源。哈佛结构优势:流水线设计,三级:取指、译指、执指,当取指使用程序空间,执指采用数据空间时,可以处理,但传统冯诺伊曼结构不支持。注意点2,新版的keil里面找外设资源时没有标准库只有hel库,因此要么用老版本的,要么换离线模式配置。:通过独立的总线访问指令和数据,可以同时进行。

2025-03-12 11:54:13 653

原创 day1-keil软件下载及配置

破译步骤:右击keil软件以管理员身份打开>>点击右上角的file>>License...>>复制CID>>粘贴回keygen软件>>点击Genrate生成>复制生成ID号返回keil软件>>复制到Add LIC框内,出现2032即注册完成。清0:A&=~(1<<3).&有零为0,~取反,顺序是先将操作位移到第三位,然后将该位清零(1的取反),清零后和原来位置相与实现清零效果。置1:A|=(1<<3),或运算有一为1,因此先将1右移动3位与A或时可以将A置1。选择驱动方式,点击魔法棒选择。

2024-07-30 23:03:00 514

原创 --笔记--

段错误(Segmentation Fault,简称 segfault)是操作系统的错误,通常导致程序崩溃。举例:数组array[NUM],NUM为255,即数组中有255个元素,从0-254共计255个元素。因此array[255]这个元素不在该数组中,出现数组越界,属于段错误。

2025-07-31 10:51:02 339

原创 ..\OBJ\lx.axf: Error: L6218E: Undefined symbol GPIO_Resetbits (referred from led.o).

出现错误:..\OBJ\lx.axf: Error: L6218E: Undefined symbol GPIO_Resetbits (referred from led.o).查看该文件下是否有gpio.h的文件,有的话查看名称和使用是否一致。该函数在#define后面,及时函数不对也不会标红。

2025-07-15 13:50:23 206

原创 ..\CMSIS\core_cm4.h(190): error: #5: cannot open source input file “core_cmSimd.h“: No such file or

从官方下载的V1.8.0版本的固件包,根据网上的配置没有找到对应的core_cm4_simd.h文件,一次我从其他已经建好的工程里拷贝了进来,配置完成后一直报这个错误固件库中有core_cmSimd.h文件,经过对比发现core_cm4.h函数中调用core_cm4_simd.h的位置被core_cmSimd.h取代,

2025-07-03 09:46:40 309

原创 Cannot Load Flash Device Description !

解决方法:点击魔法棒---Debuf---Settings---Flash Download---Add---选择如图128k的即可。本次使用的是F103 因此使用的128K的。

2025-07-02 09:05:24 95

原创 Error: L6200E: Symbol PendSV_Handler multiply defined (by os_cpu_a.o and stm32f4xx_it.o).

1原地写一个#include "stm32f4xx_it.c"跳转进函数内删掉即可,顺便将.h文件对应定义也删掉。移植μCOSⅢ后编译遇到。

2025-06-26 15:28:13 196

原创 出现了一个意外的情况,不能完成所有你在设置中所需要的更改

总结:本质上没有改变问题的本身,但是能过够更改网段。之前通过查阅一些方法,有点用指令修复有的将缺少的复制注册表复制过来都试过,但是改完网段确定时都会显示不能完成更改。选择要更改的网络,此处选择的是 “以太网 6” 更改为192.168.1.188 (ip地址)255.255.255.0(子网掩码) 192.168.1.0(默认网关)某天更改IPv4的网段时出现的,经过重启和网上搜索教程都试过了都没有用,最后只能退而求其次通过指令更改网段。需要注意“以太网 6”中间是有空格的不能忽视。

2025-02-26 10:00:45 737

原创 day1 必备linux命令和c语言

软硬件可裁剪linux系统是一个树形的分层组织结构。

2025-02-25 22:47:53 316

原创 共用体1111

char和int加一块都没有八字节可以叠,占用空间3*8byte。结构体每个成员都有自己的地址编号,共用体所以成员地址是一样的。结构体:空间对齐(向上对其,可以叠加)共用体:向上对齐,后面数据覆盖前面数据。,基本数据类型:只能存储一种类型数据。,共用体:可以存储多种类型数据。结构体:同时存储多种类型数据。

2025-01-15 22:40:16 179

原创 立创eda学习2

略。

2024-12-06 21:40:53 629

原创 立创eda学习

功能:支持电路仿真,PCB软件设计,3D打印案例:立创泰山派PCB蓝牙音箱3D外壳彩色丝印设计支持软板设计软件下载与安装:客户端与个人中心介绍。

2024-12-04 22:47:37 1106

原创 c语言学习28结构体介绍

说明:用声明过的结构体类型定义的变量,可以存储数据定义结构体变量格式:格式1:用类型名定义结构体类型名 变量;//bk1变量名格式:声明类型的同时定义结构体变量格式2:声明结构体类型的同时定义结构体变量struct类型名成员1 数据类型 变量名;成员2 数据类型 变量名;成员3 数据类型 变量名;}结构体变量名 bk1;格式3:重命名类型,用别名定义结构体变量typedefstruct类型名成员1 数据类型 变量名;

2024-11-27 21:52:16 546

原创 c语言学习27宏定义&条件编译

define 预处理属性:预处理功能:在预处理的时候,将程序中的语句或表达式重命名(别名)格式:不带参宏定义带参宏定义格式: #defind 别名 要宏定义的内容 //别名在前 没有分号 要宏定义的内容加括号说明:宏名用大写例子:#define LED_ON (GPIO->&=~(1<<4))位置:放在.h文件中放在.c最上面好处:使程序简单,更直观,方便程序维护使用场景:传感器功能码,特殊功能等等分类:标准宏定义带参宏定义。

2024-11-22 22:32:24 456

原创 c语言学习26字符串的应用

else if(strcmp((char *)usart1_rec_buff,"sp1")>=0 && strcmp((char *)usart1_rec_buff,"sp9")<=0 && led_flag && strlen((char *)usart_rec_buff)==3)//led_flag开机调速strcmp比1-9ascall码。open 流水灯打开。close 流水灯关闭。speed 1~9速度控制。pc通过串口发送字符串命令控制流水灯。字符串在stm32串口中的应用。

2024-11-22 20:39:19 240

原创 c语言学习25二维数组

二维数组本质是一个数组。举例:数组名 a;元素个数10;数组元素类型:int [3];数组元素下标:0~9这是一个数组,有十个元素,每个元素内有三个数据。

2024-11-21 22:33:57 671

原创 c语言学习笔记24字符串与字符串库函数

整型数组:数组元素都是整形 int a[10];实型数组:数组元素都是小数 float a[10];指针数组:数组元素都是地址 int *a[10];字符数组:数组元素都是字符 char a[10];

2024-11-21 03:45:00 1040

原创 c语言学习23数组传递到子函数

将主函数的数组传递到子函数中,传入子函数中处理,接收返回数据打印。//浮点型,保留两位小数。//从大到小,把小的往后面丢。子函数形参是一个可以存 数组首元素地址的。把首元素地址传给子函数,子函数中可以通过。i++)//去掉最大最小值。数组首元素的类型 int。首元素地址[下标值]

2024-11-19 22:52:05 650 2

原创 c语言数据22数组使用

在第一次循环时,最小的数被排到了最后,因此在下一次排序时不需要遍历到最后一位,其他以此类推......因此遍历的数量为 数据个数-轮数。若需要将数组从大到小进行排序,通过两两比较的方式将最小的数据排到最后,然后是次小.....循环的最后一次,应该是最大和次大的数进行比较,因此所需要循环的循环次数为 数据个数-1。需求:定义一个10个元素的数组,每个元素是int类型,用户输入十个整型数据,求平均值。从地址编号上是一样的,但偏移量是不一样的。

2024-11-19 21:45:23 622

原创 c语言学习21数组

概念:数组就是 相同数据类型 的一组数据的集合数组中每个数据 元素用一个名字来命名这个集合 数组名用编号区分 下表(从0开始自动标号)当处理大量 相同数据类型时,使用数组非常方便说明:定义前要保证要存储的数据的数据类型一样要知道元素的具体数据类型数组名要符合命名规则要预判数组中元素的个数元素个数必须大于0;元素个数一定是整型常量;

2024-11-17 22:11:18 203

原创 c语言学习20函数指针&指针函数

a=*p;//地址不偏移b=*p+1;//值加1,指向不变c=*p++;//++的优先级高优先值在后,所以是先用后加,然后指针向前偏移d=*p;// 上面已经偏移e=*(p+1)//这里p执行读操作,整体指向下一个,但p本身指向没变f=*p//地址不变。

2024-11-17 18:32:05 378

原创 c语言学习19参数传递

参数传递就是函数在调用时,实参传递到形参的过程。实参的值拷贝给形参的过程;实参:真正想要传进去的数据形参:子函数 接收父亲函数传来实参 的位置,实参跟着子函数改变。

2024-11-16 20:54:32 375

原创 c语言学习18指针简介

格式:指向对象类型 *变量名;说明:定义指针类型变量,根据需求选择确的指针类型,然后根据格式定义举例:int a;int *p;p=&a;//p存a的地址int *m;int **p;p=&m;//px存m的地址说明:指针变量p存储了变量a的地址;==可以说指针变量p指向了变量a;指针变量存了谁的地址,就是指向了谁明确指向(存了一个变量的地址)%x3.2 &:取地址符 *:取空间内容符int *p;//p里存储的值,//p里存储的值所代表的地址空间的编号。

2024-11-16 19:28:09 1015

原创 c语言学习17修饰变量关键字

功能:此函数只对此.c文件起作用,不允许外调,不与其他文件中的其他同名函数冲突。功能:修饰局部变量,把变量存储到存储区的静态区,函数结束后,局部变量不会被释放。使用修饰局部变量 static int a=1;说明:对于局部变量,函数结束后,局部变量会释放。/*释放清理掉这块空间,全局变量不释放*/

2024-11-15 10:00:00 341

原创 c语言学习15四则运算

四则运算练习需求:进入一个界面选择+-*/ printf选择运算法则(如果选择错误,提示重新选择) switch case defult显示100以内两个随机数,输入运算结果 rand系统显示正确答案,并且判断正确错误要求:封装函数分析:int main(void){//界面程序-----界面函数//

2024-11-14 20:52:14 1070

原创 c语言学习16按键控制流水灯

*验证是否一直进入,观察有灯亮但很短,串口打印只有一个数字。按一次只返回一次1松开后返回0x255,所以不能直接用按键来控制,按键松开后值就变了,但用一个按键控制一个标志变量,标志变量来控制一个流水灯*///led_flash(speed);//掉电不保存,w25q64可以。

2024-11-14 20:50:58 699

原创 c语言学习14函数调用及联系

注:如果一个函数有参数,调用的时候一定要传参;如果一个函数有返回值,调用的时候可以不接收返回值;返回值可以是多个数据。

2024-11-12 22:13:56 431

原创 c语言学习13函数的定义

具有相应功能的代码。

2024-11-12 20:29:51 189

空空如也

空空如也

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

TA关注的人

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