自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

腹有诗词气自华

坚持每天努力一点点,水滴石穿!

  • 博客(162)
  • 收藏
  • 关注

原创 MOS管知识整理

其实我狗屁都不懂,什么都不会,就是直接用模拟软件来多次的尝试,直到能够成功模拟出我要的结果就好了,特此记录一下今天的模拟过程,防止以后再用到,不会又得从头模拟一遍了,这一遍就把大部分的内容记录下来,下次想用的时候就要快多了。好了,通过上面的实验就能证实我要想用STM32控制12V的通断就用NMOS管就比较合适,高电平时导通,低电平时截止。具体真正实际中还有什么问题,那就是以后的事了,发现问题在解决问题吧!(栅极G电压 > 源极S电压时, PMOS管截止,如下图)

2024-07-14 21:31:31 172

原创 用Python编写一个模拟usb摄像头的程序

昨天有个朋友找我要刷点政府的再就业的视频课,说是就是用浏览器打开固定的网站,然后用身份证号码登录,然后播放里面的视频,不定时的网页会通过usb摄像头拍照做人脸识别,就是这么一个简单的要求,叫我给想想办法,我就想用自动化来处理这个问题,说是每刷满一个人的学时就可以给我100元,我一想这个事可以啊!所以就着急忙慌的开始找办法解决这个问题,最终把虚拟摄像头的问题给解决了,操作浏览器的自动化还没有搞定,但是这个事估计黄了,昨天找完我,今天就没有在问过我了,感觉人家就是说了一下,我就开始搞了。

2024-07-11 11:47:06 321 2

原创 STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁

在没有接触到FreeRTOS时,也没有想过同时叫两个或两个以上的led灯闪烁的想法,接触后,发现如果想叫两个灯同时以不同的频率闪烁,不能说是不可能,就算是做到了也要非常的麻烦。但是学习了FreeRTOS后,发现要想同时执行几个函数还是很简单的一件事,虽然CPU是单核心的,这就好比是电脑编程中的多线程,这个函数执行1毫秒,那个函数执行1毫秒,就这样不停地切换,由于切换的速度相当的快,给人的感觉就是这几个函数在同时执行。这个工程创建好了,就不用每次都创建了,每次赋值粘贴重命名就好了,还是很省事的啊!

2024-07-06 15:44:54 741

原创 AH1117-3.3芯片使用记录

今天在新做好的电路板上测试电源时发现一个问题,那就是散热端不能接地,接地了就好像短路一样,芯片会热的厉害,当我把该引脚与地的所有连接都切断后,短路现象消失,特此记录一下,防止自己下次再犯同样的错误。

2024-06-30 17:37:35 178

原创 STM32的FreeRtos的学习

还要在stm32f10x_it.c文件中把刚刚宏定义的三个函数注释掉:107行 126行 135行。至此编译主函数下载到单片机中就能看到PC13的小灯在闪烁了。其他的地方我也不懂呢?今天第一天开始学习。至此所需要的文件就全部拷贝齐全了,接下来就是在工程中添加各个文件了。下载下来的是一个zip文件,解压缩了。1:声明一个任务句柄。2:创建一个任务函数。

2024-06-09 16:34:36 1039

原创 STM32手写超频到128M函数

按照上面的步骤操作后,系统时钟就按照我们的标准来设置了。其实这个操作没有什么太大的必要性,因为系统会自动为我们配置好的,研究这个过程是为了更深一步的了解STM32的工作步骤。学会了如何设置STM32的时钟频率,步骤比较详细,也很容易理解,就是视频教程不能跳着看,只能一节节的看,不然会知识不连贯,造成有些知识不理解,连续着看还是没有什么难度的。6:锁相环时钟配置:来源HSE1分频,倍频因子9倍(也可以改成自己想要的倍数,超频就改这里)3:设置AHB的时钟 1分频 72M。9:系统时钟选择锁相环时钟。

2024-05-25 20:48:11 540

原创 STM32手写寄存器的方式实现点亮LED灯

的老师讲的还是很到位的,能够学习到很多的细节之处,有时会感觉很啰嗦,但是不得不说确实很详细,只有这样对于真正的底层才能更清楚明白是怎么回事,原理很重要。写这篇博文的目的是记录我的练习过程中连续好几天犯得同一个错误,每次写都这样,而且找半天找不到哪里错了,必须拿着原来写的一行一行的对,才能发现问题,特此记录一下,下次再范同样的错误时就来看这篇文章吧!感觉这样就能快速的定位错误了。这个工程是很简单的,从0开始建立工程,自己手写寄存器映射,感觉对标准库的理解又前进了一大步。

2024-05-15 11:14:23 479

原创 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 604

原创 STM32独立看门狗,实现单片机自动重启

今天学习了一下独立看门狗,看门狗的主要作用就是防止程序中有死循环或是不知道的bug,而造成在while循环中没有及时喂狗,程序就会控制单片机重启复位,从而不至于影响程序一直不能正常工作。为了验证是不是由看门狗引起的复位,特此调用rcc里面的检查独立看门狗的复位标志位,来显示不同的字符串,就可以看出来到底是手动复位还是看门狗复位了。第一步:开启LSI的时钟(打开看门狗会自动开LSI,所以这一步什么都不做)其实看门狗的应用也不是很复杂,主要分了4步,第一步还不用任何操作。

2024-05-01 07:59:28 811

原创 STM32进入待机模式,使用闹钟和WKUP唤醒单片机

第三:使用闹钟信号,唤醒待机模式 (闹钟到了就唤醒单片机,不需要其他设置,设置了 闹钟就可以了)可以开启WKUP(也是PWR的一个函数,这样PA0有上升信号也能 唤醒单片机)主要就是上面提到的三步,其他的程序还要自己来编写,需要闹钟或是WKUP功能时,选择性添加对应的代码就可以了。第二:进入待机模式 (调用PWR的一个函数就进入了待机模式)

2024-04-30 10:55:47 1300

原创 STM32开启停止模式,用外部中断唤醒程序运行

今天学习了一下STM32的停止模式,停止模式下,所有外设的时钟和CPU的电源都会被关闭,所以会很省电,打破这种停止模式的方式就是外部中断可以唤醒停止模式。主要看要求,没有特别的要求,不怕费电可以不用,用了就是为了省电,特别是电池供电的情况下。好了,今天的学习到此结束!第二步:调用PWR的停止模式函数。第一步:开启PWR的时钟。

2024-04-29 20:41:01 902

原创 STM32进入睡眠模式的方法

今天学习了如何控制STM32进入睡眠模式,进入睡眠模式的好处就是省电,今天学习的只是浅度睡眠,通过中断就能唤醒。比如单片机在那一放,也许好几天好几个月都不用一次,整天的在那空跑while循环,是不是有很大的资源浪费啊,这个时候就要用到这个睡眠模式了,没有收到串口数据的时候,你就可以睡觉,等到收到串口数据后再醒来执行一段代码,执行完后,接着睡觉,再等着下次收到数据(也就是产生串口中断的时候),这样就感觉合理的利用了单片机的功能,其实要想实现这样的功能,很简单只需要一句:__WFI();

2024-04-28 05:43:40 615 2

原创 STM32修改主频的方法

如果想改成其他的主频,就自行更改就好了。更改主频的好处就是节省电量了,频率降低一半,耗电量也会降低一半的,有充足电源的时候不用考虑,如果是电池供电,那就很有必要了。如果有些地方一天24小时只采集一次数据,那就快慢无所谓了。大家都知道STM32F103C8T6的主频是72M,那怎么样才能在程序中获得这个主频的值呢?依据下方的方法把自己想要的主频的一行解开注释,把72M的一行注释掉,就这样更改了主频。如图找到主频的变量,然后显示这个变量就是显示主频了。按照上面的方法把文件的属性中的只读去掉,就可以了。

2024-04-27 18:18:11 1030

原创 STM32读写RTC内部时钟外设,设置和显示时钟

第二步:启动RTC的时钟,使用RCC模块里的RCC_LSEConfig函数,开启LSE的时 钟。第六步:配置CNT的值(给RTC一个初始时间)需要闹钟的话,配置个闹钟;今天学习了STM32单片机的内部时钟外设,学会了更改内部时钟和提取时钟数值的操作,只要后备电池有电,该时钟就会一直走,时间不会复位,哪怕没有给单片机供电。第三步:把结构体中的时间存放到我们指定的全局变量数组中。第二步:把时间戳转换成时间,存放到结构体中。

2024-04-24 10:07:10 1626 3

原创 STM32读写备份寄存器BKP

这个BKP寄存器的意思就是在芯片的VB引脚上接个电池,就能保存其寄存器中的数据掉电不丢失。将其编译下载后就能显示这次的实验结果了:这个结果只要VB有电池供电,其他都断电,其DR中的数据也不会丢失。第二步:使用PWR的一个函数,使能对BKP和RTC的访问。读取数据:BKP也有个读取的函数。写入数据:BKP有个写入的函数。大体的步骤为:先初始化,然后写DR,再读DR。第一步:开启PWR和BKP的时钟。

2024-04-23 06:27:28 573

原创 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 2541 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 1306 1

原创 STM32利用软件I2C通讯读MPU6050的ID号

今天的读ID号是建立在上篇文章中有了底层的I2C通讯的6个基本时序来编写的。十:发送应答位(0:就是给从机应答(从机继续发数据) 1:就是不给从机应答(从机停止发数据))四:发送 指定寄存器地址(用于指定读写哪个寄存器)四:发送 指定寄存器地址(用于指定读哪个寄存器)七:发送 从机地址+读写位1(1:读 0:写)二:发送 从机地址+读写位(1:读 0:写)九:接收一个字节(此时,总线控制权交给从机)六:发送(要写入指定寄存器下的数据)二:发送 从机地址+读写位。

2024-04-14 06:03:09 967

原创 STM32完成软件I2C通讯

下面就是我写的六个时序的代码部分,可以结合着我画的图来理解,能很快的应用起来,刚开始的小伙伴估计不太会看这个时序图,我也是刚刚才有所感觉的,画的不好,理解的不够透彻,还望多多指正啊!四:接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)下面是main.c文件,测试基础的I2C代码的时序都有没有问题。

2024-04-12 17:13:17 525

原创 STM32的位操作(相当于51单片机的sbit)

经过一段时间的学习,今天发现STM32的单个端口都有一个32位的地址,这样就可以把这个地址给找出来,进行单个位的操作了,这也没有什么好说的,直接复制粘贴就好了,用到的时候过来复制直接使用就行了。暂时我是用不到这个方法的,也不是什么特别重要的方法,用别的方法也能达到同样的效果,不过感觉没有这样直接啊!上面这个代码是写到头文件里面的,使用的时候就是直接使用PAout(n)就好了,n写几就是第几个端口这个单独的位,0x0c是ODR寄存器的偏移地址。

2024-04-08 21:27:47 631

原创 STM32实现软件SPI对W25Q64内存芯片实现读写操作

这么简单的一个程序,我学习了一个星期左右,终于把所有的关节都打通了。为了使自己的记忆更为清晰,特意总结了一个思维导图,感觉自己即便是日后忘记了看一遍思维导图也就知道怎么写了。根据时序图会更好更快的理解程序的逻辑,一切都是要最后芯片的时序来编程,否则就不能和芯片通讯了。连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入。直接调用读取时序,无需使能,无需额外操作,没有页的限制,写入操作结束后,芯片进入忙状态,不响应新的读写操作。读取操作结束后不会进入忙状态,但不能在忙状态时读取。

2024-04-03 15:37:56 1025

原创 STM32通过串口发送指令控制LED灯亮灭OLED并显示命令

接下来就不说废话了,自己看源代码吧!工程编译后下载到单片机就能实现串口控制LED灯的亮灭了。

2024-03-24 09:55:45 3294 1

原创 STM32利用标准库(中断方式接收)编写串口收发1个字节的数据

下午的实验是开启了串口中断,不用软件时刻的去盯着有没有收到数据了,硬件收到数据后触发中断,这个实验和上午的实验的差别在什么地方呢?好了,下面全部文件展示一下,不明白的仔细阅读代码吧?编译后下载到单片机中就能看到实验结果了。

2024-03-22 15:40:51 734

原创 STM32利用标准库实现串口接收数据

总共就更改了这些内容,就实现了单片机的串口发送+接收的功能,看起来还是很简单的吧!

2024-03-22 11:15:48 518

原创 STM32利用串口标准库发送字节,发送数组,发送字符串,发送数字,实现printf功能。

都是通过串口发送到电脑端的数据,废话不多说了,自己看上篇文章再看这篇,就差不多理解了,不理解就从头开始看吧,每节的代码敲10遍就理解了,我这都敲了5遍了才勉强记住,我们不是神,我们只是一个熟练工,塌下心来不停地敲代码,总有一天会明白的,坚持就是胜利。今日学习了野火的关于串口的教学视频,结果最后的printf函数怎么样都实现不了,结果还是看了江科大的视频才找到原因,特此记录一下过程,就差了这么一点,我找了3个早晨的问题,最后不得已才看了江科大的视频,才找到原因。

2024-03-22 10:30:34 2983

原创 STM32利用串口外设发送数据

/第三步:初始化USART(9600波特率、8位字长、无校验、1位停止位、无流控,只有发送模式)//第四步:发送开启USART,接收需要配置中断和NVIC。//第二步:GPIO初始化TX复用输出RX输入。//第一步:把USART和GPIO的时钟打开。

2024-03-21 10:51:43 733

原创 STM32利用ADC和DMA外设读取4路电压值Oled显示

今天早晨把昨天学习的内容又重新写了一遍,防止自己的记忆不够深刻,特此又写了这篇博文,从造成5点点起床到现在终于搞完了,有点小错误也修改过来了,下午再写一遍,差不多就记住了。下面就是今天早晨写的Addma.c文件:这些都是根据昨天整理的步骤来完成的,感觉现在自己的记忆力又有所提高了,这么多东西居然能记住了。Oled和Delay的代码和原来的一样,就不展示了,没有的自己去我以前的文章中找吧!都有发出过,之后编译后烧录到单片机内就能实现4路模拟电压的测量了。

2024-03-21 08:54:02 730

原创 STM32同时测量4路模拟电压,用DMA自动搬运到数组内,不用软件干预。

下午我做的实验室同时测量4路模拟信号,测量的结果通过ADC开启DMA触发,叫数据转运小帮手自动把数据搬走,放到数组内,就省去了,各种检测啊,恢复标志位啊,等等的麻烦操作,直接去读数组的值就好了,数据已经被更新了。好了,通过上面的一顿操作猛如虎,编译下载后就能看到自己想要的结果了,想要屏幕上的字不闪的那么快主函数中的循环内就加大点延时,不在乎就小点或是没有,我为了拍照拍全就加了200毫秒的延时,就能拍全了。5:/*ADC初始化*/(独立模式,数据右对齐,不使用外部触发,连续转换,扫描模式,通道数4)

2024-03-20 15:39:27 658

原创 STM32利用ADC同时同时测量4路模拟电压

这样编译后,下载到STM32单片机里面就能看到最终的效果了,当然如果你有红外传感器,光敏传感器或是热敏传感器之类的东西也可以直接接到模拟输入端口上来测得电压值,而判断应该干什么,是点灯啊,还是打开电动机啦,等等的一系列的操作吧,你就随意了。下面是Myadc.c的文件内容:今天写的没有带太多的注释,不明白的可以看昨天的文章。

2024-03-20 09:22:35 562 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 3038

原创 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 1181

原创 STM32输入捕获频率和占空比proteus仿真失败

也许我是仿真的缘故吧!如果能后面会更新的。这个程序最后的实验结果是读取到的CCR1和CCR2的值都是0,所以没有办法算出来频率和占空比。由于总是显示不了正确的频率和占空比,特意把两个数都显示在OLED上,结果都是0。第三步:配置时基单元,让CNT计数器在内部时钟的驱动下自增运行。第二步:GPIO初始化,把GPIO配置成输入模式(上拉输入)第六步:选择触发之后执行的操作执行Reset操作(一个函数)第五步:选择从模式的触发源(TI1FP1)(一个函数)第一步:RCC开启时钟,把GPIO和TIM的时钟打开。

2024-03-13 15:38:23 991 4

原创 STM32利用标准库编写同时输出4路PWM信号的程序(Proteus)仿真

这个是根据上午发的文章的基础上更改的,很简单,只是用了一个定时器,初始化了4个比较器而已,就可以单独的控制每一路PWM的占空比了,好了,把源文件展示一下,完事去接孩子放学。

2024-03-11 16:58:28 1349 3

原创 STM32利用标准库控制定时器3复用端口PB4输出PWM波形

这节也是接着上节来演示的,上节写的是TIM2的CH1输出PWM波形,这次来学习一下TIM3的端口复用方法来输出PWM,来看看端口引脚图:正常情况下TIM3的CH1通道的PWM输出引脚为PA6,现在我不想用这个端口输出了,我想换一个端口来输出,怎么办呢?那就得复用GPIO口了。其实这个弄能还是挺简单的,不过也得记录一下,不然用不了多久就忘记了:使能新的引脚,然后失能原来引脚上的默认功能。

2024-03-11 10:49:00 832

原创 STM32利用标准库的方式输出PWM(proteus仿真)

整个过程是用不到OLED的,我没有把初始化代码删掉,是为了如果想查看一些变量的值的话,用OLED显示出来,会很方便的。还有一个原因是这个工程代码是复制了OLED显示的工程而来,懒得删了,就留下了。程序中用到了延时两个延时文件要有,整个工程的代码文件我之前分享过,没有的可以去我之前的文章找下载链接,复制改名就ok了。第一步:RCC开启时钟,把我们要用 的TIM外设和GPIO外设的时钟打开。第四步:配置GPIO口,初始化为复 用推挽输出的配置。第五步:运行控制,启动计数器。第三步:配置输出比较单元。

2024-03-10 06:30:38 1825 8

原创 STM32使用标准库编写外部时钟控制oled显示计数(proteus仿真)按键中断控制led灯亮灭。

这节课的结果是在上节课的基础上更改的:电路图为:用一个开关来模拟外部时钟的高低电平的变化。其他的地方和原来是一样的,直接编译仿真就能运行了:如果有什么不明白的地方去看上一片文章吧!

2024-03-06 16:48:43 538

原创 STM32用标准库做定时器定时1秒更新OLED的计数值(Proteus仿真)

然后赋值我之前文章中提到的文件夹OLED屏幕显示:(没有的自己去那篇文章下载去)

2024-03-06 15:21:12 966 2

原创 STM32利用标准库编写PA0和PA4中断proteus仿真

首先先看看结果吧:昨天学习的是5--9或10--15引脚的中断,如果选择的是0到4口应该怎么办呢?链接:https://pan.baidu.com/s/1lN4LGbaKLTKQ2LMx8uzmBA?

2024-03-05 17:00:47 285

原创 STM32利用标准库编写中断控制oled计数(proteus仿真)

的基础上来完成的,主要是在Mycode文件夹里面新建了两个文件来创建中断的功能方式如下:结构很简单,就是count.c里面的东西有点多而已。先看先程序效果:每按动一次按钮OLED显示的值加1.这个按键的检测是用中断完成的。接下来就是编译后,导入proteus中就能看到效果了。

2024-03-04 16:50:08 790

原创 STM32利用标准库编写OLED显示的程序做Proteus仿真

其实测试OLED显示的功能很简单的,就几个函数,调用一下传个参数,就OK了,超级简单,看我的main函数的这几行代码,简单的要死了。下面就看看最终的程序效果吧:我感觉这个标准库写的显示程序比HAL库写的好用,最起码仿真不会卡死,记得用HAL库时模拟一次死机一次。这个标准库就没有这些问题了。起始这个工程很简单下载我的工程文件压缩包,解压后打开proteus工程和keil工程,直接就能修改或是测试了。链接:https://pan.baidu.com/s/1LKIgT688-lXgkrez4s0Sfw?

2024-03-03 17:29:57 986

空空如也

空空如也

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

TA关注的人

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