- 博客(170)
- 收藏
- 关注
原创 STM32实现RS485通讯
本文展示了RS485通信的实现过程,重点介绍了硬件连接和软件编程。通过RS485转换芯片,实现了数据的收发功能。在数据传输过程中,由于存在错误,建议使用CRC校验以确保数据的可靠性,并在校验失败时进行重发。软件部分通过初始化、发送和接收函数实现了RS485通信,代码中使用了USART2进行数据传输,并通过PB12口控制发送和接收的切换。最终,通过串口调试助手验证了数据的正确收发。整体实现与串口通信类似,但需注意发送接收的切换控制。
2025-05-19 18:45:29
553
原创 STM32接收红外遥控器的遥控信号
通过几天的学习,成功解析了红外遥控信号的原理。红外遥控信号通过高低电平的时间区分二进制0和1,组合成32位数据。NEC红外码的编码时序中,逻辑1和逻辑0分别对应不同的高低电平时间。接收端通过统计高电平时间判断信号是0还是1。发送信号时,控制IO口的高低电平时间即可。接收信号时,红外接收二极管导通会拉低IO口电平,通过中断统计时间区分信号。NEC码还包括引导码,通过高低电平时间区分。编写程序时,通过统计高电平时间的函数和中断函数,可以轻松实现红外信号的接收和解析。最终,通过程序判断遥控按键的值并执行相应动作。
2025-05-18 05:33:22
1143
原创 STM32编写触摸按键
总体结果就是led1用来体现程序正在运行,不停的闪烁,led用来指示有触摸,还是没有触摸,串口不停地接收到触摸的计数值。先看接线图,挺简单的,就用串口1,和两个led灯一个1MΩ电阻一个触摸导线(如果做电路板的话,就是一个手指大小的铺铜)
2025-03-27 18:51:55
394
原创 嘉立创下载的封装图,个个都有问题,制造时错误不断,要注意!
保存到本地硬盘上了,就能用AD打开,复制粘贴到自己的工程中了,但是这会就要注意了,因为每一个元件都会带着一个Mechanical 15的层,这是一个机械层,这层到底有什么用处我不知道,但是有的画送去加工厂做板时就会告诉你有问题,之前我是没有注意,结果就这个问题改了一天半,才算是改好了,所以这会还是要提前把这一层的东西都删掉比较好。我知道就是加工厂会认为他有问题,叫你改,改的时候就是一个元件一个元件的删除这层,为了后面出现问题,还不如下载完复制到自己的库中时就删掉呢?分清哪个是原理图,哪个是封装图。
2025-03-25 13:00:09
605
原创 AD20生成贴片文件的步骤
电路图都画好后,而且也制作出了电路板了,我们的焊接技术又不过关,那怎么办呢?只能是花钱来找贴片的给咱们进行机器贴片了。第一步:如图中先后点击 文件->装配输出->Generates pick and place files。第二步:选择要输出的项目列表(也可以按照厂家的要求勾选,当然默认的也就够了,随意!第三步:点击确定后,需要的文件就输出到Outputs文件夹里面了,自行查看就好了。
2025-01-05 09:43:58
734
原创 关于使用大夏龙雀4G模块透传数据的记录
ML307R的建立UDP连接的过程:第一步:发送DTU命令:AT+DTUTASK="1","10"第二步:建立UDP连接:AT+SOCK=1,1,"longjiushang753.a1.luyouxia.net",26378,1 (可以直接使用域名)第三步:重启ML307R:AT+REST 就这样每次重启设备后,等待串口收到 REGSTER:SUCCESS 这条指令就能直接透传数据了。最好的地方是不用担心ML307R掉线,它会自动重连,直接发送要发送的数据就
2024-11-29 10:18:20
1018
原创 关于I2C读写AT24C04存储芯片的一些浅显认知?
这两天一直在尝试往AT24C04芯片里面存储数据,试了几天了,发现能查找的相关资料还是很少的,有些东西搞不明白,说是可以看数据手册,但是我的英文视频不要太辣鸡了。也许我说的太过了,主要是我这几天视频和网页确实是没有少看,但是没有找到丁点线索,基本上千篇一律,都是互相抄袭的。下面是AT24C256.c文件(刚开始时是手上有C256的芯片,试了一天后发现自己搞不定,就买了24C04芯片来实验,结果也没有搞定,好惭愧啊!如果哪个小伙伴看到了,能够在我的基础上又有了新的发现,望能告知,我在此感激不尽啊!
2024-11-25 15:49:39
417
原创 MOS管知识整理
其实我狗屁都不懂,什么都不会,就是直接用模拟软件来多次的尝试,直到能够成功模拟出我要的结果就好了,特此记录一下今天的模拟过程,防止以后再用到,不会又得从头模拟一遍了,这一遍就把大部分的内容记录下来,下次想用的时候就要快多了。好了,通过上面的实验就能证实我要想用STM32控制12V的通断就用NMOS管就比较合适,高电平时导通,低电平时截止。具体真正实际中还有什么问题,那就是以后的事了,发现问题在解决问题吧!(栅极G电压 > 源极S电压时, PMOS管截止,如下图)
2024-07-14 21:31:31
1331
1
原创 用Python编写一个模拟usb摄像头的程序
昨天有个朋友找我要刷点政府的再就业的视频课,说是就是用浏览器打开固定的网站,然后用身份证号码登录,然后播放里面的视频,不定时的网页会通过usb摄像头拍照做人脸识别,就是这么一个简单的要求,叫我给想想办法,我就想用自动化来处理这个问题,说是每刷满一个人的学时就可以给我100元,我一想这个事可以啊!所以就着急忙慌的开始找办法解决这个问题,最终把虚拟摄像头的问题给解决了,操作浏览器的自动化还没有搞定,但是这个事估计黄了,昨天找完我,今天就没有在问过我了,感觉人家就是说了一下,我就开始搞了。
2024-07-11 11:47:06
866
3
原创 STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁
在没有接触到FreeRTOS时,也没有想过同时叫两个或两个以上的led灯闪烁的想法,接触后,发现如果想叫两个灯同时以不同的频率闪烁,不能说是不可能,就算是做到了也要非常的麻烦。但是学习了FreeRTOS后,发现要想同时执行几个函数还是很简单的一件事,虽然CPU是单核心的,这就好比是电脑编程中的多线程,这个函数执行1毫秒,那个函数执行1毫秒,就这样不停地切换,由于切换的速度相当的快,给人的感觉就是这几个函数在同时执行。这个工程创建好了,就不用每次都创建了,每次赋值粘贴重命名就好了,还是很省事的啊!
2024-07-06 15:44:54
1097
原创 AH1117-3.3芯片使用记录
今天在新做好的电路板上测试电源时发现一个问题,那就是散热端不能接地,接地了就好像短路一样,芯片会热的厉害,当我把该引脚与地的所有连接都切断后,短路现象消失,特此记录一下,防止自己下次再犯同样的错误。
2024-06-30 17:37:35
280
原创 STM32的FreeRtos的学习
还要在stm32f10x_it.c文件中把刚刚宏定义的三个函数注释掉:107行 126行 135行。至此编译主函数下载到单片机中就能看到PC13的小灯在闪烁了。其他的地方我也不懂呢?今天第一天开始学习。至此所需要的文件就全部拷贝齐全了,接下来就是在工程中添加各个文件了。下载下来的是一个zip文件,解压缩了。1:声明一个任务句柄。2:创建一个任务函数。
2024-06-09 16:34:36
1151
原创 STM32手写超频到128M函数
按照上面的步骤操作后,系统时钟就按照我们的标准来设置了。其实这个操作没有什么太大的必要性,因为系统会自动为我们配置好的,研究这个过程是为了更深一步的了解STM32的工作步骤。学会了如何设置STM32的时钟频率,步骤比较详细,也很容易理解,就是视频教程不能跳着看,只能一节节的看,不然会知识不连贯,造成有些知识不理解,连续着看还是没有什么难度的。6:锁相环时钟配置:来源HSE1分频,倍频因子9倍(也可以改成自己想要的倍数,超频就改这里)3:设置AHB的时钟 1分频 72M。9:系统时钟选择锁相环时钟。
2024-05-25 20:48:11
823
原创 STM32手写寄存器的方式实现点亮LED灯
的老师讲的还是很到位的,能够学习到很多的细节之处,有时会感觉很啰嗦,但是不得不说确实很详细,只有这样对于真正的底层才能更清楚明白是怎么回事,原理很重要。写这篇博文的目的是记录我的练习过程中连续好几天犯得同一个错误,每次写都这样,而且找半天找不到哪里错了,必须拿着原来写的一行一行的对,才能发现问题,特此记录一下,下次再范同样的错误时就来看这篇文章吧!感觉这样就能快速的定位错误了。这个工程是很简单的,从0开始建立工程,自己手写寄存器映射,感觉对标准库的理解又前进了一大步。
2024-05-15 11:14:23
571
原创 STM32窗口看门狗的操作
上面的程序喂狗时间如果低于30ms和高于50毫秒,都会触发窗口看门狗复位,单片机都会自动重启,为了不叫单片机自动重启,请在合理的时间内进行喂狗操作。STM32的窗口看门狗的主要功能是,程序过早的喂狗还有太晚喂狗,都会触发单片机重启,就是有一个时间段,在这个时间段内喂狗才不会触发单片机重启。主要的步骤就是这么多了,其他的程序自己搞定,在程序中加入上面的四步就能实现窗口看门狗。T[5:0] - W[5:0] = 33 前面算的T[5:0] = 54。取整:(T[5:0] + 1) = 55。
2024-05-08 09:25:00
895
原创 STM32独立看门狗,实现单片机自动重启
今天学习了一下独立看门狗,看门狗的主要作用就是防止程序中有死循环或是不知道的bug,而造成在while循环中没有及时喂狗,程序就会控制单片机重启复位,从而不至于影响程序一直不能正常工作。为了验证是不是由看门狗引起的复位,特此调用rcc里面的检查独立看门狗的复位标志位,来显示不同的字符串,就可以看出来到底是手动复位还是看门狗复位了。第一步:开启LSI的时钟(打开看门狗会自动开LSI,所以这一步什么都不做)其实看门狗的应用也不是很复杂,主要分了4步,第一步还不用任何操作。
2024-05-01 07:59:28
1219
原创 STM32进入待机模式,使用闹钟和WKUP唤醒单片机
第三:使用闹钟信号,唤醒待机模式 (闹钟到了就唤醒单片机,不需要其他设置,设置了 闹钟就可以了)可以开启WKUP(也是PWR的一个函数,这样PA0有上升信号也能 唤醒单片机)主要就是上面提到的三步,其他的程序还要自己来编写,需要闹钟或是WKUP功能时,选择性添加对应的代码就可以了。第二:进入待机模式 (调用PWR的一个函数就进入了待机模式)
2024-04-30 10:55:47
2017
1
原创 STM32开启停止模式,用外部中断唤醒程序运行
今天学习了一下STM32的停止模式,停止模式下,所有外设的时钟和CPU的电源都会被关闭,所以会很省电,打破这种停止模式的方式就是外部中断可以唤醒停止模式。主要看要求,没有特别的要求,不怕费电可以不用,用了就是为了省电,特别是电池供电的情况下。好了,今天的学习到此结束!第二步:调用PWR的停止模式函数。第一步:开启PWR的时钟。
2024-04-29 20:41:01
1605
原创 STM32进入睡眠模式的方法
今天学习了如何控制STM32进入睡眠模式,进入睡眠模式的好处就是省电,今天学习的只是浅度睡眠,通过中断就能唤醒。比如单片机在那一放,也许好几天好几个月都不用一次,整天的在那空跑while循环,是不是有很大的资源浪费啊,这个时候就要用到这个睡眠模式了,没有收到串口数据的时候,你就可以睡觉,等到收到串口数据后再醒来执行一段代码,执行完后,接着睡觉,再等着下次收到数据(也就是产生串口中断的时候),这样就感觉合理的利用了单片机的功能,其实要想实现这样的功能,很简单只需要一句:__WFI();
2024-04-28 05:43:40
1077
2
原创 STM32修改主频的方法
如果想改成其他的主频,就自行更改就好了。更改主频的好处就是节省电量了,频率降低一半,耗电量也会降低一半的,有充足电源的时候不用考虑,如果是电池供电,那就很有必要了。如果有些地方一天24小时只采集一次数据,那就快慢无所谓了。大家都知道STM32F103C8T6的主频是72M,那怎么样才能在程序中获得这个主频的值呢?依据下方的方法把自己想要的主频的一行解开注释,把72M的一行注释掉,就这样更改了主频。如图找到主频的变量,然后显示这个变量就是显示主频了。按照上面的方法把文件的属性中的只读去掉,就可以了。
2024-04-27 18:18:11
1608
原创 STM32读写RTC内部时钟外设,设置和显示时钟
第二步:启动RTC的时钟,使用RCC模块里的RCC_LSEConfig函数,开启LSE的时 钟。第六步:配置CNT的值(给RTC一个初始时间)需要闹钟的话,配置个闹钟;今天学习了STM32单片机的内部时钟外设,学会了更改内部时钟和提取时钟数值的操作,只要后备电池有电,该时钟就会一直走,时间不会复位,哪怕没有给单片机供电。第三步:把结构体中的时间存放到我们指定的全局变量数组中。第二步:把时间戳转换成时间,存放到结构体中。
2024-04-24 10:07:10
1984
3
原创 STM32读写备份寄存器BKP
这个BKP寄存器的意思就是在芯片的VB引脚上接个电池,就能保存其寄存器中的数据掉电不丢失。将其编译下载后就能显示这次的实验结果了:这个结果只要VB有电池供电,其他都断电,其DR中的数据也不会丢失。第二步:使用PWR的一个函数,使能对BKP和RTC的访问。读取数据:BKP也有个读取的函数。写入数据:BKP有个写入的函数。大体的步骤为:先初始化,然后写DR,再读DR。第一步:开启PWR和BKP的时钟。
2024-04-23 06:27:28
907
原创 STM32利用硬件I2C读取MPU6050陀螺仪数据
参 数:GyroX GyroY GyroZ 陀螺仪X、Y、Z轴的数据,使用输出参数的形式返回,范 围:-32768~32767。参 数:AccX AccY AccZ 加速度计X、Y、Z轴的数据,使用输出参数的形式返回,范 围:-32768~32767。配置完MPU6050的各个功能寄存器,剩下的就是读取陀螺仪的数据了。电源管理寄存器1,取消睡眠模式,选择时钟源为X轴陀螺仪。电源管理寄存器2,保持默认值0,所有轴均不待机。配置寄存器,配置DLPF。
2024-04-21 05:56:42
3082
1
原创 STM32实现硬件I2C通讯,读取MPU6050的ID号
最后就是读取MPU6050的ID号了,MPU6050的ID号存在MPU650的寄存器地址为0x75,读取这个地址中的值就是ID号了。第一步:打开GPIOB的时钟(因为I2C2的引脚10,11在GPIOB上)第九步:发送7位地址(方向:接收模式)最后一位是接收模式。第十三步: 等待EV7事件(接收完成)第三步:发送7位地址(方向:发送者)第三步:发送7位地址(方向:发送者)第四步:等待EV6事件(发送完成)第六步:等待EV8事件(正在发送)第四步:等待EV6事件(发送完成)第六步:等待EV8事件(发送完成)
2024-04-19 16:38:16
2651
2
原创 STM32利用软件I2C通讯读MPU6050的ID号
今天的读ID号是建立在上篇文章中有了底层的I2C通讯的6个基本时序来编写的。十:发送应答位(0:就是给从机应答(从机继续发数据) 1:就是不给从机应答(从机停止发数据))四:发送 指定寄存器地址(用于指定读写哪个寄存器)四:发送 指定寄存器地址(用于指定读哪个寄存器)七:发送 从机地址+读写位1(1:读 0:写)二:发送 从机地址+读写位(1:读 0:写)九:接收一个字节(此时,总线控制权交给从机)六:发送(要写入指定寄存器下的数据)二:发送 从机地址+读写位。
2024-04-14 06:03:09
1381
原创 STM32完成软件I2C通讯
下面就是我写的六个时序的代码部分,可以结合着我画的图来理解,能很快的应用起来,刚开始的小伙伴估计不太会看这个时序图,我也是刚刚才有所感觉的,画的不好,理解的不够透彻,还望多多指正啊!四:接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)下面是main.c文件,测试基础的I2C代码的时序都有没有问题。
2024-04-12 17:13:17
622
原创 STM32的位操作(相当于51单片机的sbit)
经过一段时间的学习,今天发现STM32的单个端口都有一个32位的地址,这样就可以把这个地址给找出来,进行单个位的操作了,这也没有什么好说的,直接复制粘贴就好了,用到的时候过来复制直接使用就行了。暂时我是用不到这个方法的,也不是什么特别重要的方法,用别的方法也能达到同样的效果,不过感觉没有这样直接啊!上面这个代码是写到头文件里面的,使用的时候就是直接使用PAout(n)就好了,n写几就是第几个端口这个单独的位,0x0c是ODR寄存器的偏移地址。
2024-04-08 21:27:47
1078
原创 STM32实现软件SPI对W25Q64内存芯片实现读写操作
这么简单的一个程序,我学习了一个星期左右,终于把所有的关节都打通了。为了使自己的记忆更为清晰,特意总结了一个思维导图,感觉自己即便是日后忘记了看一遍思维导图也就知道怎么写了。根据时序图会更好更快的理解程序的逻辑,一切都是要最后芯片的时序来编程,否则就不能和芯片通讯了。连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入。直接调用读取时序,无需使能,无需额外操作,没有页的限制,写入操作结束后,芯片进入忙状态,不响应新的读写操作。读取操作结束后不会进入忙状态,但不能在忙状态时读取。
2024-04-03 15:37:56
1214
原创 STM32通过串口发送指令控制LED灯亮灭OLED并显示命令
接下来就不说废话了,自己看源代码吧!工程编译后下载到单片机就能实现串口控制LED灯的亮灭了。
2024-03-24 09:55:45
6949
1
原创 STM32利用标准库(中断方式接收)编写串口收发1个字节的数据
下午的实验是开启了串口中断,不用软件时刻的去盯着有没有收到数据了,硬件收到数据后触发中断,这个实验和上午的实验的差别在什么地方呢?好了,下面全部文件展示一下,不明白的仔细阅读代码吧?编译后下载到单片机中就能看到实验结果了。
2024-03-22 15:40:51
1031
原创 STM32利用串口标准库发送字节,发送数组,发送字符串,发送数字,实现printf功能。
都是通过串口发送到电脑端的数据,废话不多说了,自己看上篇文章再看这篇,就差不多理解了,不理解就从头开始看吧,每节的代码敲10遍就理解了,我这都敲了5遍了才勉强记住,我们不是神,我们只是一个熟练工,塌下心来不停地敲代码,总有一天会明白的,坚持就是胜利。今日学习了野火的关于串口的教学视频,结果最后的printf函数怎么样都实现不了,结果还是看了江科大的视频才找到原因,特此记录一下过程,就差了这么一点,我找了3个早晨的问题,最后不得已才看了江科大的视频,才找到原因。
2024-03-22 10:30:34
5860
原创 STM32利用串口外设发送数据
/第三步:初始化USART(9600波特率、8位字长、无校验、1位停止位、无流控,只有发送模式)//第四步:发送开启USART,接收需要配置中断和NVIC。//第二步:GPIO初始化TX复用输出RX输入。//第一步:把USART和GPIO的时钟打开。
2024-03-21 10:51:43
2218
原创 STM32利用ADC和DMA外设读取4路电压值Oled显示
今天早晨把昨天学习的内容又重新写了一遍,防止自己的记忆不够深刻,特此又写了这篇博文,从造成5点点起床到现在终于搞完了,有点小错误也修改过来了,下午再写一遍,差不多就记住了。下面就是今天早晨写的Addma.c文件:这些都是根据昨天整理的步骤来完成的,感觉现在自己的记忆力又有所提高了,这么多东西居然能记住了。Oled和Delay的代码和原来的一样,就不展示了,没有的自己去我以前的文章中找吧!都有发出过,之后编译后烧录到单片机内就能实现4路模拟电压的测量了。
2024-03-21 08:54:02
953
原创 STM32同时测量4路模拟电压,用DMA自动搬运到数组内,不用软件干预。
下午我做的实验室同时测量4路模拟信号,测量的结果通过ADC开启DMA触发,叫数据转运小帮手自动把数据搬走,放到数组内,就省去了,各种检测啊,恢复标志位啊,等等的麻烦操作,直接去读数组的值就好了,数据已经被更新了。好了,通过上面的一顿操作猛如虎,编译下载后就能看到自己想要的结果了,想要屏幕上的字不闪的那么快主函数中的循环内就加大点延时,不在乎就小点或是没有,我为了拍照拍全就加了200毫秒的延时,就能拍全了。5:/*ADC初始化*/(独立模式,数据右对齐,不使用外部触发,连续转换,扫描模式,通道数4)
2024-03-20 15:39:27
770
原创 STM32利用ADC同时同时测量4路模拟电压
这样编译后,下载到STM32单片机里面就能看到最终的效果了,当然如果你有红外传感器,光敏传感器或是热敏传感器之类的东西也可以直接接到模拟输入端口上来测得电压值,而判断应该干什么,是点灯啊,还是打开电动机啦,等等的一系列的操作吧,你就随意了。下面是Myadc.c的文件内容:今天写的没有带太多的注释,不明白的可以看昨天的文章。
2024-03-20 09:22:35
693
4
原创 STM32编写ADC功能,实现单路测量电压值(OLED显示)
是否启用间隔模式 void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);ADC获取双模式转换值,这个是双ADC模式读取转换结果 void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);第五步:打开ADC_CMD()开启ADC。
2024-03-19 20:21:11
4180
原创 STM32实验DMA数据搬运小助手
/获取中断标志位状态 void DMA_ClearITPendingBit(uint32_t DMAy_IT);第三步:调用DMA_CMD,通道使能(要在对应的外设调用XXX_DMACmd开启一下触发信号的输出,如果需要DMA的中断,就调用DMA_ITConfig,开启中断输出,再在NVIC里,配置中断通道,最后写中断函数就行了)void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);
2024-03-18 20:31:26
1389
原创 STM32输入捕获频率和占空比proteus仿真失败
也许我是仿真的缘故吧!如果能后面会更新的。这个程序最后的实验结果是读取到的CCR1和CCR2的值都是0,所以没有办法算出来频率和占空比。由于总是显示不了正确的频率和占空比,特意把两个数都显示在OLED上,结果都是0。第三步:配置时基单元,让CNT计数器在内部时钟的驱动下自增运行。第二步:GPIO初始化,把GPIO配置成输入模式(上拉输入)第六步:选择触发之后执行的操作执行Reset操作(一个函数)第五步:选择从模式的触发源(TI1FP1)(一个函数)第一步:RCC开启时钟,把GPIO和TIM的时钟打开。
2024-03-13 15:38:23
1446
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人