- 博客(256)
- 收藏
- 关注
原创 stm32——PWM实现呼吸灯效果
led为什么可以越来越亮,越来越暗?由不同的占空比决定(占空比由CCRx决定)。使用pwm点亮led,实现呼吸灯效果。④配置io口的pwm输出。修改比较值,修改占空比。② RCC设置时钟来源。
2023-06-04 23:39:59 742
原创 stm32——PWM概述
STM32F103C8T6中硬件就可以生成PWM方波,芯片中的PWM资源。在向上计数时,一旦CNT<CCRx时输出为有效电平,否则为无效电平;在向下计数时,一旦CNT>CCRx时输出为无效电平,否则为有效电平。在向上计数时,一旦CNT<CCRx时输出为无效电平,否则为有效电平;在向下计数时,一旦CNT>CCRx时输出为有效电平,否则为无效电平。占空比:由CCRx决定,有效电平占一个周期的比例。通用定时器(TIM2-TIM4):各4路。有效电平可以是高电平,也可以是低电平。高级定时器(TIM1):7路。
2023-06-04 19:35:20 549
原创 stm32——定时器中断点亮led
PSC、RCC、自动重装载。配置TIM2定时器:clock source为internal clock(时钟来源)使用定时器中断方法,每500ms翻转一次led状态。定时器中断调用的虚函数:(进行重写)
2023-06-04 19:06:59 785
原创 stm32——定时器
使用精准的时基,通过硬件方式,实现定时功能。定时器核心时计数器。例如要定时500ms,则PSC=7199,ARR=4999,Tclk=72M。.触发输入作为外部时钟或者按周期的电流管理。不精确,占用cpu资源。基本定时器(TIM6-TIM7))控制定时器和定时器互连(可以用。计数器启动、停止、初始化或者由内部。通用定时器(TIM2-TIM5)高级定时器(TIM1&TIM8),计数器时钟频率的分频系数为。个定时器控制另外一个定时器).更新:计数器向上溢出。向下溢出,计数器初始化。向下自动装载计数器(
2023-06-04 18:38:45 283
原创 stm32——电动车报警器
1、先用PA4中断实现按键点亮D3_PB8:SYS选择串口→RCC配置外部晶振、clock配置时钟→PA4设置为下降沿中断,NVIC打开中断→PA8电平设置为高→命名为alert_project→toolchain/IDE配置为MDK-ARM→对代码生成.c/.h文件→生成完成。2、添加M433控制,按键按下,电平拉高(上升沿中断),并且换为PB7连接继电器,添加mark标志位,a按键按下标志on,b按键按下标志off,在on的状态下触发震动传感器喇叭才会一直响。
2023-06-03 17:17:04 312
原创 stm32——中断方法点亮led
2、重写HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);2、配置GPIO口:在GPIO中配置按键&led相关的io口,led为PB8\PB9配置为output配置为默认高电平;按键为PA0\PA1配置为GPIO_EXTI0\GPIOEXTI1,需要配置触发方式,上升沿、下降沿、上升下降沿触发。1、配置时钟:cude MX里边选择串口→RCC里选择时钟外部晶振→clock configuration中配置时钟,HES、PLLCLK、72,时钟配置完成。
2023-06-03 16:13:51 195
原创 stm32——中断
产生中短线路目的是把输入信号输入到NVIC,进一步会运行中断服务函数,实现功能,这样是软件级的。EXTI可以实现对每个中断/事件进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。响应优先级:抢占优先级相同,高响应优先级不能打破低响应优先级,当两个抢占优先级相同的中断同时发生的时候,哪个响应优先级高,哪个先执行;EXTI_Trigger_Rising_Falling = 0x10 //上升沿和下降沿都触发。抢占优先级:高中断优先级会打破低中断优先级,优先运行高中断优先级。
2023-06-03 15:40:41 353
原创 stm32——复位和时钟控制
打开cude MX→先将sys里debug改为串口→rcc里HSE(高速外部时钟)选择Crystal/Ceramic Resonator→然后打开clock configuration→勾选HSE、勾选PLLCLK→HCLK中填写72,最大MHz→最后'/'是分频,X是倍频,达到我们需要的时钟(产品手册5.3.1可以查到需要配置的最大或最小时钟)→生成时钟相关的代码(看工作需求,用到什么配置什么)系统复位对应芯片7引脚RST,系统复位和上电掉电都是整个系统的复位,备份域复位只影响备份区域。
2023-06-03 14:57:59 424
原创 stm32——按键控制led
打开keil5先编译文件(否则不能快速寻找文件对应的位置f12)→定义key的状态(看对应引脚是高电平还是低电平,需要进行读取引脚的操作,如果读取到的引脚==reset低电平,则该按键被按下为key_on状态,否则未被按下为keyoff状态)→main函数中用轮询法while(1)不断循环来判断按键的状态控制D3,D5的亮灭,ifsw1=keyon、D3亮,否则不亮。D5判断同样如此,这里运用了io口的翻转来控制,并且添加while卡按键松开再亮。1、用cude MX程序生成keil5文件。
2023-06-03 14:38:16 1074 1
原创 stm32——认识stm32
是一种集成电路芯片,把处理器cpu、存储器ROM、多种io口和中断系统、定时器、计数器等功能集成到一块硅片上构成的一个微型的计算机系统。8——64k字节型闪存存储器,4=16k\6=32k\b=128k\c=256k\d=384k\e=512k。C——48脚,引脚数T=36\R=64\V=100\Z=144。缺少标准库与HAL库的区别、认识GPIO口、推挽&开漏对比。103——增强型,101=基本型、102=usb基本型。6—— -40~85温度范围,7=-40~105。T——封装,LQFP封装。
2023-06-03 13:43:36 172
原创 stm32——cubeMX的使用
2、Pinout &Configuration输入芯片的型号STM32F103C8T6→生成的文件中双击打开该芯片→选择操作的引脚要操作的内容→System core打开GPIO进行操作→System core中SYS中debug设置成serial wire(串行线调试)此时PA13&PA14自动配置。4、Project Manger→project设置项目名字,存储地址(路径中不带有中文路径)→Toolchain/IDE中选择MDK-ARM(建立完成自动生成keil5文件打开)
2023-06-03 13:42:24 988
原创 stm32——keil5的使用
https://www.st.com/en/development-tools/stsw-link009.htm官网可以下载(直接从资料包配置)设备管理器→STM32 ST-LINK→属性→更新驱动程序→浏览我的电脑→粘贴驱动路径安装驱动。烧录工具有很多种,比如串口、J-Link、U-Link、ST-Link等。接线:swclk(时钟)、swdio(io口相关的通信线)、gnd。4、配置魔术棒→debug→ST-Link debugger。第二个按钮:只编译有修改的文件生成一个.hex文件。
2023-06-03 13:35:41 743
原创 树莓派——人脸识别1
HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。运行结果为1,表示错误,原因是编译的结果只支持http,而调用的接口使用的是https,因此需要ssl。cd ./_install/lib(ls -l进入可以看到链接的库)①linux下载安装(wget是linux的。echo ~(查看echo的文件夹)以上必传参数为空表示没有传图片。
2023-05-25 23:04:55 122
原创 树莓派——libcurl第三方库的使用(调用libcurl库访问百度)
/configure --prefix=$PWD/_install --host=arm-linux//host,指定交叉编译。./configure --prefix=$PWD/_install//不进行交叉编译安装,当前文件夹(指定文件夹)tar xvf curl-7.71.1.tar.bz2 (解压文件)make install//可以生成_install文件。查看结果:vi /tmp/get.html。libcurl的官网。②运行./a.out。库下载。make//进行配置。
2023-05-25 17:07:10 271
原创 树莓派——libcurl库
libCurl需要读取数据传递给远程主机时将调用CURLOPT_READFUNCTION指定的函数,函数原型是:size_t function(void *ptr, size_t size, size_t nmemb,void *stream). CURLOPT_READDATA 表明CURLOPT_READFUNCTION函数原型中的stream指针来源。该函数是curl中非常重要的函数,curl所有设置都是在该函数中完成的,该函数的设置选项众多,注意本节的阐述的只是部分常见选项。
2023-05-25 11:58:41 173
原创 树莓派——https协议
http协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。https协议是在http和tcp之间多添加了一层,进行身份验证和数据加密。
2023-05-25 11:46:24 192
原创 树莓派——http协议相关概念
这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分请求行、请求头、请求体。get请求,没有请求主体部分!
2023-05-25 11:37:14 212
原创 树莓派——http、tcp、socket协议
第四次挥手 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
2023-05-25 11:05:45 909
原创 树莓派——linux智能家居
控制端支持语音设备的输入uart,也可以是安卓app(tcp客户端)红外——电风扇、电视、空调、小夜灯。433M:泳池灯、实景智能窗帘。接线:灯的接线,orangepi2、5、7、8接4联继电器1,2,3,4,摄像头:监控、人脸锁。orangepi11脚接火灾检测,设置为input。如下图,一边是指令工厂、一边是控制工厂,main函数负责组织架构。外设——灯:客厅灯、餐厅灯、二楼灯、卫生间灯;mainPro.c中用链表链接起来指令工厂。实际运行效果是将以上对应的灯逐一关闭。
2023-05-23 11:50:16 379
原创 树莓派——linux设计模式(工厂模式)
建筑设计领域引入到计算机科学种来的。一共有23种设计模式。让代码更容易被他人理解、保证代码可靠性、程序的重要性。c语言:面向过程,一门不太友好的面向对象的语言java:面向对象类是一种用户定义的引用数据类型,也称类类型。c语言中的结构体;对象:类的一种具象//类,抽象 模板int age;int sex;int other;int main()struct animal dog={"阿黄",1,1,100,dogeat,dogbeat,"dd"};//直接赋值。
2023-05-18 12:39:16 213
原创 树莓派——文件系统
常规认知,根目录文件系统是操作系统用于明确存储设备组织文件的方法。以上说的方法,就是文件管理系统(程序),简称文件系统windows,c盘(操作系统,也可以在c盘存放文件)、d盘文件系统对应的整块内存,目录即分区linux,按照功能严格分区,每个分区严格存放文件文件系统对应的不是整块内存,目录不是分区嵌入式系统可以分为4个区,分别是bootloader(系统启动代码)para(启动代码向内核传递参数的位置)kernal(内核分区)根分区等(文件系统结构)
2023-05-16 10:23:13 348
原创 stm32——freeRTOS中断管理
在我们的系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先级并不是从0-15,默认是从5-15,0-4这5个中断优先级不是freeRTOS控制的(5是取决于configMAX_SYSCALL_INTERRUPT_PRIORITY(默认是5))创建一个队列及一个任务,按下按键KEY1触发中断,在中断服务函数里向队列发送数据,任务则阻塞接收队列数据。:当按下key1时触发中断,往队列中写入信息,任务接收到队列,接收到打印处理。任何中断的优先级都大于任务。在创建的任务中,读取队列中的内容。
2023-05-13 19:50:47 808
原创 stm32——freeRTOS软件定时器
简单可以理解为闹钟,到达指定一段时间后,就会响铃。stm32芯片自带硬件定时器,精度较高,达到定时时间后会触发中断,也可以生成PWM、输入捕获、输出比较等,功能强大,但是由于硬件的限制,个数有限。软件定时器也可以实现定时功能,达到定时时间和可调用回调函数,可以在回调函数里处理信息。
2023-05-13 18:59:30 704
原创 stm32——freeRTOS延时函数
HAL_Delay一直不停的调用获取系统时间的函数,知道指定的时间流逝然后退出,故其。,任务阻塞后,RTOS系统调用其他处于就绪状态的优先级最高的任务来执行。绝对延时:vTaskDelayUntil。相对延时:vTaskDelay。vTaskDelay作用是。一般来说,用vTaskDelay比较多。HAL_Delay是一个逻辑的代码。占用了全部cpu时间。
2023-05-13 15:33:48 1174
原创 stm32——freeRTOS任务通知
freeRTOS从版本v8.2.0开始提供任务通知这个功能,每个任务都有一个32位的通知值。按照freeRTOS官方说法,使用消息通知比通过二进制信号量方式解除阻塞快45%,并且更加省内存(无需创建队列)。在大多数情况下,任务通知可以替代二值信号量、计数信号量、事件标志组,可以替代长度为1的队列(可以保持一个32位整数或指针值),并且任务通知速度更快,使用RAM更少。
2023-05-13 11:50:52 444
原创 stm32——freeRTOS事件标志组
表明某个事件是否发生,联想:全局变量flag。通常按位白哦是,每一个位表示一个事件(高8位不算)是一组事件标志位的集合,可以简单的理解事件标志组,就是一个整数。事件标志组本质是一个16位或32位无符号的数据类型EventBis_t,由configUSE_16_BIT_TICKS决定。虽然使用了32位无符号的数据类型变量来存储事件标志,其中高8位用作存储事件标志组的控制信息,低24位用作存储事件标志,所以说一个事件组最多可以存储24个事件标志!二、事件标志组相关api函数函数描述。
2023-05-12 16:41:30 242
原创 stm32——freeRTOS互斥量
在多数情况下,互斥型信号量和二值型信号量非常相似,但是从功能上二值型信号量用于同步,而互斥型信号量用于资源保护。互斥型信号量和二值型信号量还有一个最大的区别,互斥型信号量可以有效解决优先级反转现象。当高优先级任务正等待信号量(此信号量被一个低优先级任务拥有着)的时候,一个介于两个任务优先之间的中等优先级任务开始执行——这就会导致一个高优先级任务在等待一个低优先级任务,而低优先级任务却无法执行类似死锁的情形发生。优先级继承:优先级继承就是为了解决优先级反转问题而提出的一种优化机制。
2023-05-12 00:15:59 270
原创 stm32——freeRTOS计数型信号量
计数型信号量相当于队列长度大于1的队列,因此计数型信号量能够容纳多个资源,这是在计数型信号量被创建的时候确定的。
2023-05-11 19:48:40 143
原创 stm32——freeRTOS二值信号量
信号量(semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代码段不被并发调用。分拆信号量:信号可以起到通知信号的作用,量可以表示资源的数量,当我们的量只有0和1的时候,它就可以被称为二值信号量,只有两个状态,当我们的那个量没有限制的时候,它就可以被称作为计数型信号量。二值信号量就是一个长度为1,大小为0的队列,只有0和1两种状态,通常情况下,我们用它来进行互斥访问或任务同步。互斥访问:比如门钥匙,只有获取到钥匙才可以开门。
2023-05-11 19:07:56 310
原创 stm32——freeRTOS队列
队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递消息。为什么不使用全局变量?如果使用全局变量,兔子(任务1)修改了变量a,等待树獭(任务3)处理,但树獭处理速度很慢,在处理数据的过程中,狐狸(任务2)有可能又修改了变量a,导致树獭有可能得到的不是正确的数据。在这种情况下,就可以使用队列。兔子和狐狸产生的数据放在流水线上,树獭可以慢慢一个个依次处理。关于队列的几个名词:队列项目:队列中的每一个数据;
2023-05-11 17:22:45 316
原创 stm32——freeRTOS任务调度、任务4种状态
调度器就是使用相关的调度算法来决定当前需要执行哪个任务。freeRTOS中开启任务调度的函数是vTaskStartScheduler(),但是在cubeMX中被封装为osKernelStart()。
2023-05-10 19:50:56 1477
原创 stm32——freeRTOS任务的创建与删除
可以看到新增一个freertos.c文件,入口函数在这个文件中,修改&使用也在这个函数中进行。动态创建任务的堆栈由系统分配,而静态创建任务的堆栈由用户自己传递。可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。:指向任务函数的指针,任务必须实现为永不返回(即连续循环);只需将待删除的任务句柄传入该函数,即可将该任务删除。:任务的名字,主要是用来调试,默认情况下最大长度是。任务创建成功,返回pdPASS。,则代表删除任务自身(当前正在运行的任务)。:用于返回已创建任务的句柄可以被引用。
2023-05-10 19:21:57 493
原创 stm32——移植freeRTOS到stm32上
→System Core/RCC/high speed clock(hse)选择crystal/ceramic resonator→。⑤打开串口connectivity/USART1/Mode打开asynchronous,波特率115200。设置编译只编译所需文件,生成.c.h文件→生成代码。裸机的时钟源默认是systick,但是开启freeRTOS后,1ms 定时,用于任务调度),所以需要需要为其他总线提供另外的时钟源。的内核版本更高,功能更多,在大多数情况下。3、freertos选项卡介绍。
2023-05-10 17:02:13 1199
原创 stm32——freeRTOS介绍
freeRTOS是一个迷你的实时操作系统内核,作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。比如uc/OS,freeRTOS,RTX,RT-Thread等这些都是RTOS类操作系统。3、很多半导体厂商产品的SDK软件开发工具包,就使用freeRTOS作为操作系统,尤其是wifi、蓝牙这些带有协议栈的芯片或模块。每个任务都是独立运行的,互补影响,由于切换的频率很快,就感觉像是同时运行的一样。
2023-05-10 12:10:49 994
原创 树莓派——linux交叉编译
交叉编译,是在一个平台上生成另一个平台上的可执行代码。(在一个平台上编译,在另外一个平台上运行;例如c51,我们在windows上面编写c51代码,并编译成可执行代码,如xx.hex,是在c51上进行运行,不是在windows上面运行)cd /lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:进入这个文件夹中。代码的编译:gcc进行编译(正常的编译,在一个平台上生成在该平台上可执行的代码)
2023-05-09 21:36:41 444
原创 linux——ubuntu18-04虚拟机搭建(VMware)
2、打开VMware→创建新的虚拟机→自定义,下一步→兼容性不用修改,下一步→选择镜像iso所在位置,下一步→输入全名、用户名、密码、确认密码,下一步→填写虚拟机名称,位置(选择比较大的磁盘),下一步→处理器数量和内核都修改成2个(根据自己电脑配置选择),下一步→申请内存2g,下一步→网络使用桥接网络,下一步→io控制器使用推荐,下一步→磁盘类型(推荐)→创建新的虚拟磁盘,下一步→磁盘大小20g(默认),下一步→指定磁盘文件(默认),下一步→勾选创建后开启虚拟机,完成。4、安装gcc、g++、make。
2023-05-07 23:49:19 692
原创 树莓派——linux库概念及相关编程(分文件编程)
同共享函数库是一个东西(在linux上叫共享对象库,文件后缀是.so,windows上叫动态加载函数库,文件后缀是.dll)-L :告诉gcc编译器-L制定的路径去找静态库(默认是从/usr/lib /usr/local/lib去找)2、程序升级简单,因为app里没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功。1、链接时不复制,程序运行时由系统动态加载到内存,供程序使用,系统只加载一次,多个程序可以共用,节省内存。gcc 主文件.c -lxxx -L ./
2023-05-06 01:12:30 105
原创 树莓派——前期准备流程
用到FileZilla软件,登陆上。本身自带的为nona。6、树莓派与windows的文件传输。4、安装vim,更新到国内的源。2、串口方式登录树莓派。5、图形方式登录树莓派。
2023-05-05 15:37:59 75
原创 orangepi——学习python04
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。模块让你能够有逻辑地组织你的 Python 代码段。导入模块,会先在当前路径中找,找不到会进入环境变量中找。python模块(类似于c语言的分文件)文件编程:打开,写入,读取文件。1、import的应用。
2023-05-05 12:32:52 166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人