- 博客(50)
- 收藏
- 关注
原创 【FPGA学习笔记】用状态机来写一个简单的自动售卖机
一、模块框图的绘制输入信号四个,分别是:时钟信号、复位信号、投币0.5元以及投币一元;输出信号两个:出可乐信号和找零信号。二、3要素输入要素:0.5、1;输出要素:不出可乐/不找零、出可乐/不找零、出可乐/找零;状态要素:0、0.5、1、1.5、2、2.5、3。三、状态机的绘制(这里可乐价格规定为2.5元)首先状态机初始状态为IDLE,投0.5元硬币,状态机从初始状态跳到HALF状态(不出可乐),投1元硬币从初始状态跳转到ONE状态(不出可乐),再来看HALF状态,如果不投币,状态机保持
2022-05-23 17:24:34
682
原创 浅谈状态机
一、状态机原理(一)有限状态机状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(Finite State Machine),主要分为2大类:Moore状态机和Mealy状态机(二)Moore状态机摩尔状态机:当输出(output)只与当前状态有关时,所描述的状态机称为Moore型状态机。(三)Mealy状态机米利状态机:当输出(output)不仅与当前状态有关而且与输入(inputs)有关时
2022-05-11 22:00:45
3669
原创 数字电路基础与Quartus-II入门
一、Modelsim的下载百度网盘下载链接:https://pan.baidu.com/s/1a9d-bq9RZmWrRV542X4IEA提取码:ifte说明:本链接来自于正点原子官方资料下载二、Quartus II的安装1.解压压缩包2.运行可执行程序3.安装导向过程①进入welcom界面②勾选“I accept the agreement”,然后点击Next③选择相应安装的位置,然后点击Next④选择安装的内容,然后点击Next⑤点击Next⑥安装过程(此过程时
2022-03-15 21:51:55
891
原创 STM32的RT-Thread-Nano移植
一、CubeMX添加RT-Thread操作系统组件获取RT-Thread Nano软件包,指路:https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc安装RT-Thread参考:https://blog.csdn.net/qq_36075612/article/details/107309750二、CubeMX新建工程这里依然选用的是STM32F103C8T6。使用引脚PA3和PA4用于点亮LED灯,同时使能串口USA
2021-12-31 12:40:45
233
原创 Email-FTP-RTSP协议实践研究
一、Email应用编程1.SMTP协议SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 S
2021-12-30 16:58:08
979
原创 AD原理图设计与Clion源码工具学习
一、使用Altium Designer软件完成STM32+W5500的系统电路原理图设计1.安装Altium Designer自行百度下载Altium Designer。可参考:https://blog.csdn.net/weixin_42014622/article/details/837210002.元件库下载链接:https://pan.baidu.com/s/1j8TW4BbuEHMBATg7ZncSTw提取码:12343.绘制stm32的最小系统的电路原理图(使用现成的元件库)1.新
2021-12-25 21:00:37
161
原创 SVM算法应用人脸表情识别
一、实验准备环境搭建pip install tensorflow==1.2.0pip install keras==2.0.6pip install dlib==19.6.1pip install h5py==2.10如果是新建虚拟环境,还需安装以下包pip install opencv_python==4.1.2.30pip install pillowpip install matplotlibpip install h5py使用genki-4k数据集下载地址:h
2021-12-25 19:51:42
460
原创 AD原理图设计、STM32+W5500网络通信
一、Altium Designer(一)简介Altium Designer 提供了唯一一款统一的应用方案,其综合电子产品一体化开发所需的所有必须技术和功能。Altium Designer 在单一设计环境中集成板级和FPGA3系统设计、基于FPGA和分立处理器的嵌入式软件开发以及PCB版图设计、编辑和制造。并集成了现代设计数据管理功能,使得Altium Designer成为电子产品开发的完整解决方案-一个既满足当前,也满足未来开发需求的解决方案。(二)优点Altium Designer通过把原理图设计
2021-12-25 18:10:02
3428
原创 数字图像与机器视觉基础补充(2)
一、彩色图像文件转换为灰度文件(一)使用opencv1.通过cvtColor库将其转为灰度(1)代码import cv2 as cvimg = cv.imread('C:/Users/86199/Pictures/lena/lena.jpg',1)img_1 = cv.cvtColor(img,cv.COLOR_BGR2GRAY)cv.imshow('gray',img_1)cv.imshow('colour',img)cv.waitKey(0)(2)结果2通过分离RGB三个通道得
2021-12-24 21:36:36
111
原创 数字图像与机器视觉基础(2)
一、OpenCV+Python车牌字符分割车牌号检测大致分为以下四个部分:1.车辆图像获取2.车牌定位3.车牌字符分割4.车牌字符识别处理原理:车牌定位需要用到的是图片二值化为黑白后进canny边缘检测后多次进行开运算与闭运算用于消除小块的区域,保留大块的区域,后用cv2.rectangle选取矩形框,从而定位车牌位置车牌字符的分割前需要准备的是只保留车牌部分,将其他部分均变为黑色背景。这里我采用cv2.grabCut方法,可将图像分割成前景与背景。分割完成后,再经过二值化为黑白图后即可进行
2021-12-24 19:58:26
108
原创 Java网络编程进化史:从IO到NIO再到Netty
一、Netty入门1.传统IO与NIONIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。1.传统IO特点①服务端阻塞点server.accept();获取套接字的时候inputStream.read(bytes);输入流读取数据的时候②传统socket是短连接,可以做短连接服务器,他无法做长连接
2021-12-17 14:30:23
124
原创 数字图像与机器视觉基础补充(1)
一、比较不同位深度BMP文件从网页上下载一张彩色图片,查看该图片信息,显示位深度24通过电脑画图程序和PS软件,分别将该图片保存为 32位、16位彩色和256色、16色、单色的位图(BMP)文件。得到以下图片分别查看这些图片信息首先是32位彩色图colorful_32c.bmp信息显示图片大小为3MB,位图大小计算:1024×768×32/8/1024=3072KB=3145728字节,这是不包含文件头信息的大小。使用UltraEdit打开图片,查看文件头信息:16位彩色图color
2021-12-10 16:02:21
2318
原创 使用Keil仿真逻辑仪观察引脚电平变化
一、keil仿真和使用示波器调波形(一)仿真设置Debug的设置,点击魔法棒进行配置(二)调试1.点击Debug进行调试2.选择逻辑分析仪:3.设置要观察的引脚添加引脚快捷方式添加引脚输入PORTX.xx(X为A.B…;xx为引脚号,比如:PORTA.4)然后按回车;输入USARTx_SR(x为数字)然后回车4.设置时间间隔为1和起始线5.设置查看USART1输出6.点击运行7.结果二、使用示波器查看(一)软件下载链接:https://pan.baidu.c
2021-12-04 21:44:00
3373
原创 STM32日历读取,设置和输出
一、了解时钟RTCRTC (Real Time Clock):实时时钟RTC是个独立的定时器。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。在断电情况下 RTC仍可以独立运行 只要芯片的备用电源一直供电,RTC上的时间会一直走。RTC实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断)。但其高级指出
2021-12-04 19:42:51
154
原创 STM32F103C8T6移植uCOS基于HAL库
一、使用CubeMX建立STM32F103C8T6HAL库1.配置RCC2.配置SYS设置PC13为GPIO_Output用于点亮LED灯设置串口USART1设置工程点击生成代码,并在Keil中打开该工程。在main函数中的while循环里添加语句while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_
2021-12-04 17:59:03
253
原创 游戏客户端编程
一、测试连接服务器1.打开cmd,输入ping 10.1.230.742.输入telnet,进入telnet界面3.输入set localecho,打开本地回显:4.连接服务器,输入命令open 10.1.230.74 3900二、设计客户端1.新建项目打开VS2022选择新建Windows窗体应用2.设计界面新建完成后,会直接来到Form1.cs[设计]的窗口,在这里点击工具箱就能将控件拖动到设计窗口上设计窗口如下:3.控件事件实现连接到服务器并接受数据双击进入游戏的
2021-11-27 23:05:55
178
原创 基于STM32的0.96寸OLED屏显示学号姓名和滚动显示
一、SPI(串行外设接口)(一)SPI概念SPI是串行外设接口(Serial Peripheral Interface)的缩写,SPI是一种高速、全双工、同步通信的通信总线,被广泛应用在ADC、LCD等与MCU的通信过程中,特点就是快。(二)SPI协议NSS:片选设备线,每个从机都有自己的一条单独的总线与主机连接,此总线的作用就是为主机选择对应的从机进行传输数据,每个从机与主机之间的NSS总线互不相干。SPI中规定通信以NSS信号线拉低为开始,拉高为结束。SCK:时钟信号线,因为SPI是同步通信
2021-11-27 22:04:32
1661
原创 stm32通过I2C接口实现温湿度AHT20的采集
文章目录**一、了解I2C总线协议****二、实现AHT20采集程序****三、参考链接**一、了解I2C总线协议1.什么是I2C协议I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。2.I2C 协议的物理层和协议层①物理层I2C是一个支持设备的总线。可连接多个 I2C 通讯设备,支持多个通讯主机及
2021-11-27 21:12:48
109
原创 TCP/UDP编程基础
一、Socket1.TCP/IP要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准,从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中1.应用层:TF
2021-11-24 19:21:07
518
原创 爬虫-python入门
一.爬虫1.什么是爬虫?网络爬虫英文名叨Web Crawler戒Web Spider。它是一种自动浏览网页并采集所需要信息的程序。爬虫从初始页面的URL开始,获取初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统给定的停止条件。网页的抓取策略通常来说,网页的抓取策略可以分为以下三类:1.广度优先2.最佳优先3.深度优先深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。广度优先:广度优先搜索策略是
2021-11-20 20:03:44
371
原创 wireshark抓包疯狂聊天程序
一.运行疯狂聊天程序,利用wireshark抓包分析此程序连接采用的协议和端口1.打开wireshark,对WLAN进行抓包,这里利用的是两台电脑连接同一个WLAN,通过接收疯狂聊天程序的消息,得知两台电脑的ip地址,利用地址过滤,得到如下包:查看数据包:尝试中文聊天:捕获的信息通过字符转换工具可以得到:二.疯狂聊天程序的原理关于UDP:将数据及源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k内;因无连接,是不可靠协议;不需要建立连接,速度快。使用udp协议主
2021-11-20 19:02:19
245
原创 Dlib模型实现人脸识别
一、安装dlib库下载Dlib安装包下载链接:http://dlib.net/files/本文章下载的是dlib-19.14.zip,下载完成后解压安装dlib安装Cmake下载链接:https://cmake.org/download/下载安装包直接点击安装就行,注意环境变量的设置下载boost下载链接:http://www.boost.org/下载之后将其解压缩,进入解压后的文件夹中,找到bootstrap.bat批处理文件,双击运行,等待运行完成后(命令行自动消失)会生成文件b2.e
2021-11-18 21:06:29
5010
原创 利用LibSVM工具实现决策树训练
一.下载LibSVM官网链接https://www.csie.ntu.edu.tw/~cjlin/libsvm/二.使用LibSVM制作鸢尾花数据集将下载的压缩文件解压如下:该文件夹中有多种语言的代码,可自行根据自己的需要进行使用。点击windows文件夹,在文件夹中找到名为svm-toy.exe的运行程序并运行手动绘制数据集的点:使用时,在程序运行框内点击鼠标左键就能打点,点击Change后能够换颜色,最后点击Save将数据保存为train.txt。在原有基础上再次添加一点数据,保存
2021-11-18 18:30:21
231
原创 SVM算法补充
一、核函数在现实当中,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。核函数特点及优点:不需要每次都具体计算出原始样本点映射的新的无穷维度的样本点,直接使用映射后的新的样本点的点乘计算公式即可;1.减少计算量;2.减少存储空间;3.一般将原始样本变形,通常是将低维的样本数据变为高维数据,存储高维数据花费较多的存储空间;使用核函数,不用考虑原来样本改变后的样子,也不用存储变化后的结果,只需要直接使用变化的结果进行运算并返回运算结果即可;4.核函数的方法和思路不是 SVM
2021-11-15 19:17:20
103
原创 两个串口之间传输文件
一.串口连接准备两个USB TO TTL和杜邦线若根,将两个USB TO TTL的RX,TX引脚交叉连接,并将两个USB接口接上一台笔记本电脑(模拟两台计算机之间的串口传输)。二.传输文件利用可以传输文件的串口调试助手(在这里我采用的是SSCOM V5.13.1),打开两个窗口,每个窗口打开一个串口(两个USB TO TTL连接产生的串口),这里可以看见串口COM4和COM5设置相应的设置,波特率是115200,数据位8,停止位1,无校验位。,打开想要发送的文件,点击发送文件三.总结波特率
2021-11-12 22:48:01
3965
原创 Ubuntu+OpenCV学习汉字点阵
一.汉字点阵字库原理1 汉字编码1.1 区位码在国标 GD2312—80 中规定,所有的国标汉字及符号分配在一个 94 行、94 列的方 阵中,方阵的每一行称为一个“区”,编号为 01 区到 94 区,每一列称为一个“位”,编号为 01 位到 94 位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉 伯数字就是它们的“区位码”。区位码的前两位是它的区号,后两位是它的位号。用区位码就 可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一的 区位码。汉字“母”字的
2021-11-12 22:38:11
60
原创 SVM深入理解&人脸特征提取
一.人脸识别数据集的建立基于dlib库人脸特征提取1.采集自己的脸部图片20张,保存到文件夹中import cv2import dlibimport osimport sysimport random# 存储位置output_dir = 'D:/myworkspace/JupyterNotebook/People/person/631907060311'size = 64 if not os.path.exists(output_dir): os.makedirs(outpu
2021-11-12 20:47:17
361
原创 STM32中断与DMA通信编程
一、中断数据输出方式:中断过程:中断程序执行过程:中断的作用:1.可以解决快速的CPU与慢速的外部设备之间的传送数据的矛盾。2.CPU可以分时为多个外部设备服务,提高计算机的利用率。3.CPU能够及时处理应用系统的随机事件,增强系统的实用性。4.CPU可以处理设备故障及掉电等突发事件,提高系统可靠性。中断优先级:1.可以解决快速的CPU与慢速的外部设备之间的传送数据的矛盾。2.CPU可以分时为多个外部设备服务,提高计算机的利用率。3.CPU能够及时处理应用系统的随机事件,增强系
2021-11-08 21:46:33
2992
原创 网络抓包与HTTP协议
一.TCP/IP协议-HTTPTCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者
2021-11-06 19:01:51
98
原创 线性判别准则与线性分类编程实践
一.线性判别准则(LDA)LDA是一种监督学习的降维技术。也就是说它的数据集的每个样本是有类别输出的,这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在进行图像识别相关的数据分析时,LDA是一个有力的工具。LDA算法的优缺点:优点1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。2)LDA在样本
2021-11-05 19:45:27
79
原创 多元线性回归算法预测房价
一、数据清洗1、数据数值处理(1)数据集主要问题1.数据缺失2.数据不一致3.存在“脏”数据4.数据不规范数据整体较为规整,但仍存在以下问题:数据缺失,存在某些数据等于0(2)删除重复数据(a)新建一个工作表house_prices_new.csv执行数据清洗,方便和原始数据区分开来,选中需要处理的数据。(b)选择数据——重复项——删除重复项(c)利用唯一标识house_id,删除重复值未发现重复项(3)升序排列选择排序——升序(4)缺失值处理通过人工手动补全,适合与
2021-11-01 22:51:32
296
原创 决策树挑出好西瓜
一.决策树在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。1.画法机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输
2021-10-31 14:57:58
656
原创 串口通信小试牛刀
一、搭建STM32开发环境——STM32CubeMX,Keil51.安装jdk由于STM32CubeMX是Java实现的,需要安装jdk环境。jdk官网下载链接:https://www.oracle.com/java/technologies/javase-downloads.html2.安装STM32CubeMX下载地址:https://www.st.com/en/development-tools/stm32cubemx.html3.安装MDK5具体安装请参照下面链接:https:/
2021-10-25 17:41:33
135
原创 STM32F103寄存器方式点亮LED
一、STM32F103系列芯片的存储器映射和寄存器映射原理1.存储器映射存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址 的过程就称为存储器映射,具体见下图。如果给存储器再分配一个地址就叫存储器重映射。存储器区域功能划分在这 4GB 的地址空间中,ARM 已经粗线条的平均分成了 8 个块,每块 512MB,每个 块也都规定了用途,具体分类见表格 6-1。每个块的大小都有 512MB,显然这是非常大的,芯片厂商在每个块的范围内设计各具特色的外设时并不一定都用得完,都是只用了其
2021-10-22 20:06:47
179
原创 从JDBC到Mybatis
**一、为什么要抛弃JDBC而选择数据持久层框架Mybatis**首先运行一下代码package test1package;import java.sql.*;public class MySQLDemo { // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "j
2021-10-22 15:19:58
192
原创 GCC背后的故事&OpenCV相逢何必曾相识
实验一1、首先创建一个目录hello.h代码#ifndef HELLO_H#define HELLO_Hvoid hello(const char *name);#endif//HELLO_Hhello.c代码#include<stdio.h>void hello(const char *name){ printf("Hello %s\n",name);}main.c代码#include"hello.h"int main(){ hello("everyone
2021-10-17 11:38:20
349
原创 STM32下C语言与汇编语言混合编程
一、创建项目首先创建一个项目添加main.c和Func.s文件: AREA MY_FUNCTION,CODE,READONLY EXPORT Init_1 ; 与在c文件中定义的Init_1函数关联起来; 高级语言中的声明和使用变量其实是对板子寄存器的使用,所以我们只需要直接使用寄存器即可Init_1 MOV R1,#0 ; 设R1寄存器为i MOV R2,#0 ; 设R2寄存器为j LOOP ; 写在最左边的是程序段的段名,执行跳转程序时用到 CMP
2021-10-15 18:24:24
72
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人