- 博客(127)
- 资源 (22)
- 收藏
- 关注

原创 代码资源已共享至GitHub
我自己之前写的一些蓝桥杯单片机组的比赛的代码资源我已经共享至GitHub,大家可以不用积分下载。https://github.com/xiaomohaa如果有疑问可以私信或者邮件,谢谢。
2021-02-01 17:36:23
920
原创 聊一聊C/C++中的extern
先说结果变量(函数)只能被定义一次,但是可以被多次声明。想要在多个文件中使用同一个变量(函数),就必须将声明和定义分离开来,变量(函数)的定义只能出现在一个文件中,而声明却可以出现在多个头文件中。记得当初初学C的时候,总想一个工程分为多个.c文件,却因为变量传递问题焦头烂额。而这里就使用到了separate compilation机制。但是将程序分成了多个文件后,就必须有文件间的共享代码。为了完成分离式编译,在C/C++里有声明和定义两个东西。定义:创建一个与名字相关联的实体,并且申请存储空
2021-02-01 17:28:29
772
原创 使用STM32的DFSDM外设来驱动PDM麦克风进行音频采集
0、前言最近需要使用STM32L4系列来完成音频采集的工作,前前后后一共尝试了三种方案,最终在各种测试条件以及功耗等原因下,选择了目前这个方案。主控使用的是STM32L475RCT6(无需一致,只要有DFSDM即可),MEMS麦克风使用的是ST的MP45DT02TR-M(某宝4.5一片)。先说一下最终的效果,最终实现在8KHz采样率下,系统能正常工作,整体功耗大约为8mW。1、之前的两种方案最开始所使用的是INMP441麦克风,这款MEMS传感器使用I2S总线来驱动,使用单片机SAI外设给传感器相
2020-11-05 17:39:56
21434
28
原创 关于ESP8266的透传模式测试(二)——UDP透传模式
ESP8266的UDP透传模式在PC端使用网络调试助手创建UDP主机,设置好主机地址以及主机端口。通TCP一样,使用串口助手连接ESP8266,通过AT指令对其进行配置。1、将ESP8266设置为STA模式。AT+CWMODE=1 //设置为 STA 模式响应:OK2、重启ESP8266,使设置生效AT+RST响应:OK3、连接路由器AT+CWJAP=“LAB411”,“lab411411”响应:OK注意这里,前面是wifi的ssid,后面是password。仅支持2
2020-09-10 20:03:53
8311
2
原创 关于ESP8266的透传模式测试(一)——TCP Client透传模式
一、前言本次测试所使用的是正点原子的ATK-ESP8266 WIFI模块。直接使用官方提供的固件使用AT指令来配置模块并使用。模块默认为AT指令状态,模拟波特率为115200(8bit数据位,1bit停止位)。硬件连接使用USB转TTL方式(电脑需要安装CH340驱动)连接ESP8266,接线图如下。二、透传模式什么是透传模式,简单的讲就是,ESP8266将通过串口接收到的数据,直接进行转发到所设置的目标服务器的端口上,而我们不需要关心WIFI协议是如何来实现数据的传输。只需要在ESP8266
2020-09-10 16:45:11
29690
6
转载 Markdown进阶(更改字体、颜色、大小,设置文字背景色,调整图片大小设置居中)
本文转载自:https://blog.youkuaiyun.com/heimu24/article/details/81189700? 基础知识: Markdown通过简单标记语法,使普通文本内容具有一定格式。但它本身不支持修改字体、字号与颜色等功能的。优快云-markdown编辑器是其衍生版本,支持基于 PageDown ( Stack Overflow)所使用的编辑器的扩展功能(如表格、脚注、内嵌HTML、内嵌LaTeX 等等)。 Size:规定文本的尺寸大小,取值从 1 到 7 ,浏览器
2020-09-10 16:06:41
1442
原创 【Java基础】Java中的八大数据类型
Java中的数据类型在Java中存在八大数据类型,分别为数据类型内存占用和取值范围不同的数据类型分配了不同的内存空间,表示不同的取值范围,具体如下表所示:数据类型关键字内存占用(字节)取值范围整数byte1-128~127整数short2-32768~32767整数int4-231~231-1整数long8-263~263-1浮点数float(单精度)41.401298e-45~3.402832e+38浮点数dou
2020-08-21 15:48:01
815
原创 【Java基础】Hello World !
HelloWorld的实例以下为打印Hello World的代码public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World !"); }}首先我们需要使用class定义一个与文件名相同的类,这里定义的是HelloWorld,前面的关键字public起一个限制作用,限制我们所定义的类名称与文件名是相同的。程序的第二行是定义一个main方法,是程序执行的开
2020-08-18 20:31:44
358
原创 【Java基础】环境变量的配置
什么是环境变量在百度百科中,环境变量是这样解释:环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进
2020-08-18 18:22:15
410
原创 【Java基础】JDK的下载和安装
0 前言关于Java的一些术语术语名缩写解释Java Development KitJDK编写Java程序的程序员使用的软件Java Runtime EnvironmentJRE运行Java程序的用户使用的软件Standard EditionSE用于桌面或简单的服务器应用的Java平台Enterprise EditionEE用于复杂的服务器应用的Java平台Micro EditionME用于手机和其他小型设备的Java平台1 下载
2020-08-18 12:14:26
677
1
原创 【Java基础】常用DOS命令
目录1、盘符切换2、dir3、进入单级目录4、回退目录5、进入多级目录6、清屏7、退出命令提示符窗口1、盘符切换格式:盘符名称:功能:盘符切换比如打开DOS命令窗口默认在C盘,现在想切换到D盘,只需要输入即可切换到D盘。D:2、dir格式:dir功能:查看当前路径下的内容。dir3、进入单级目录格式:cd 目录功能:进入某一个单级目录比如我现在想进入D盘下面的 #Xiaomo_haa# 文件夹,只需要输入,注意,
2020-08-17 21:04:51
366
原创 使用MATLAB读取PCM数据并播放
将PCM数据经过处理为ASCII数据,保存为txt文件,然后使用MATLAB进行处理。1、读取PCM数据date = importdata('PCM.TXT');importdata:把外部数据导入MATLAB。2、播放音频Fs = 16000;sound(date, Fs);sound:播放音频。Fs为音频采样率。...
2020-08-13 09:22:18
2458
原创 MDK解决方案:Warning L6989W
在使用STM32L4系列单片机,使用数学函数以及DSP库的时候,有时会出现以下警告Warning: L6989W: Could not apply patch sdcomp-29491-629360 to instruction VPOP {d8-d12} at offset 0x24, instruction is within an IT block and is not the last instruction for sin_i_x.o(i.____kernel_sin$lsc).在..
2020-07-29 14:16:17
6908
原创 MDK解决方案:error: #29: expected an expression
MDK默认用的是C90,配置一下支持C99,如下图所示或者输入--c99
2020-07-29 13:55:47
5667
原创 【STM32】HAL库开发之开启STM32L4系列单片机的FPU
STM32L4 属于 Cortex M4F 架构,带有 32 位单精度硬件 FPU,支持浮点指令集,相对于Cortex M0 和 Cortex M3 等,高出数十倍甚至上百倍的运算性能。而我们在处理音频数据的时候,有的时候需要使用官方的《arm_cortexM4lf_math.lib》来处理数据,在使用滤波器的同时就需要进行大量的浮点数计算。STM32L4 硬件上要开启 FPU 是很简单的,通过一个叫:协处理器控制寄存器(CPACR)的寄存器设置即可开启 STM32L4 的硬件 FPU。这里
2020-07-26 22:07:53
2808
1
原创 【STM32】关于MDK编译过程速度过慢
在进行HAL或者标准库开发的过程中,由于工程中添加了大量的库文件,导致在全编译过程中,系统cpu占用过高,而且编译速度巨慢以下为添加少量的库文件情况下的编译结果为了加快编译速度,将设置中的输出选项中 browse information取消勾选现在来看一下全编译的速度快了不只是一点半点!但是,这时候的函数定义的快速定位功能就不能再使用了此时会出现警告如果想使用这个功能,请打开browse information然后重新编译。所谓有失必有得,不...
2020-07-19 21:47:10
4246
1
原创 【STM32】HAL库开发之定时器作按键检测
一、按键检测本次是在前文《【STM32】HAL库开发之通用定时器中断》的基础上进一步开发首先贴上板子上面的按键电路原理图以KEY0为例,在按键没有按下的时候,GPIO的电平为高电平;当KEY0按下,此时GPIO直接与GND相连,电平变为低电平;当KEY0再次松开,GPIO的电平再次为高电平。在按键按下或松开过程中,电平状态会出现抖动状态。在很多的例程中,都是使用延时函数来进行按键消抖。但是由于使用延时函数,占用cpu资源,会导致部分程序在延时的过程中发生暂停的情况,所以本次将使用定...
2020-07-19 21:27:31
6936
5
原创 【STM32】HAL库开发之通用定时器中断
目录一、STM32的定时器资源1、STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能2、定时器计数模式3、计数器时钟选择二、使用STM32CubeMX创建工程1、设置RCC2、时钟树配置3、配置TIM34、设置工程文件等等三、程序设计四、HAL库中定时器相关的函数与其用法一、STM32的定时器资源STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有
2020-07-19 20:13:18
26270
2
原创 【STM32】时钟系统RCC
目录一、时钟树1、时钟源2、高速外部时钟信号(HSE)3、低速外部时钟信号(LSE)4、系统时钟(SYSCLK)5、时钟输出(MCO)6、AHB参考文献一、时钟树本文以STM32F103为例,将本人所知的关于STM32的时钟系统的知识点展示出来。先贴上STM32F1系列的时钟树1、时钟源由时钟树可以,对于STM32来说,时钟源一共有四个,分别为LSI、LSE、HSE、HSI。另外一种说法为五个,加上PLL。个人认为,根据上面这个时钟树也可以看...
2020-07-13 18:34:24
4565
1
原创 【STM32】HAL库开发之GPIO有关的函数
在ST官方的stm32l4xx_hal.c文件中,有一些关于GPIO的函数,有以下几个。1、HAL_GPIO_Initvoid HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)这个函数主要用来初始化我们需要用到的引脚的工作模式,包括具体引脚的工作速度、是否复用模式、上下拉等等参数。2、HAL_GPIO_DeInitvoid HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uin
2020-07-12 18:21:55
3736
原创 【STM32】HAL库开发之STM32CubeMX新建工程
目录一、引言二、新建工程1、开始2、芯片选型3、配置主界面4、引脚分配以及外设配置4.1 RCC配置4.2 调试接口配置4.3 GPIO配置5、时钟树的配置6、工程管理6.1 工程设置6.2 代码生成设置6.3 高级设置7、生成工程三、软件设计四、结束语一、引言硬件学习,始终是逃不开点灯。在这里,将以STM32L475VET6为例,创建一个STM32CubeMX的新工程文件,并且实现点亮LED。二、新建工程如上一节《【STM
2020-07-12 18:01:43
3205
转载 PCM / I2S / AC97/PDM
IIS仅仅是PCM的一个分支,接口定义都是一样的它们有四组信号: 位时钟信号,同步信号,数据输入,数据输出。 PCM一般传单声道的声音,也可以传立体声,采样频率一般为8KHz。IIS一般传立体声,比PCM多了一个线路。数据格式都为PCM格...
2020-06-26 13:31:45
1501
原创 【STM32】STM32CubeMX软件的安装
1、HAL库HAL库,全称就是Hardware Abstraction Layer(抽象印象层)。库如其名,很抽象,一眼看上去不太容易知道他的作用是什么。它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一...
2020-06-21 22:05:03
1259
1
原创 好久不见
停更了将近半年,现在开始要开始进行研究生阶段的项目了,回头看看自己之前的博文,质量很感人,后续的博文自己会尽可能提高质量的,感谢各位的支持。
2020-06-20 17:52:34
365
原创 Modelsim仿真Altera的ROM时输出一直为0,并且modelsim报错Failed to open file
刚刚在仿真ROM输出的时候,建立工程并且在分析与综合后无错误无警告,并且在mif文件的位宽和深度与I核4设置正确的情况下,出现以下情况也即是在时钟和地址都争取的情况下,ROM输出一直是0然后查看modelsim编译结果发现出现以下报错查看Memory,发现相应的ROM里全是0,确实没初始化数据。然后去查找小梅哥视频教程,发现他的一次成功,而区别就是他把mif文件直接放在了工...
2020-02-27 13:56:12
2540
1
转载 Verilog中的task用法
任务就是一段封装在“task-endtask”之间的程序。任务是通过调用来执行的,而且只有在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会执行的。调用某个任务时可能需要它处理某些数据并返回操作结果,所以任务应当有接收数据的输入端和返回数据的输出端。另外,任务可以彼此调用,而且任务内还可以调用函数。1.任务定义任务定义的形式如下:task tas...
2020-02-26 09:31:50
28223
转载 Verilog HDL中wire和reg的区别
wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。reg表示一定要有触发,输出才会反映输入的状态。reg相当于存储单元,wire相当于物理连线。reg表示一定要有触发,没有输入的时候可以保持原来的值,但不直接实际的硬件电路对应。两者的区别是:寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动。wire使用在连续赋值语句中,而reg使用在过程赋值语...
2020-02-26 09:12:15
887
原创 Verilog中clk为什么要用posedge,而不用negedge
posedge是上升沿,电平从低到高跳变 negedge是下降沿,电平从高到低跳变对于典型的counter逻辑always @(posedge sys_clk or negedge sys_rst_n) begin if(!sys_rst_n) counter <= 24'd0; //十进制0 else if(counter < led_time) begin...
2020-02-05 21:15:59
52075
1
原创 Verilog的关键字
目录1、Verilog所有关键字2、常用关键字Verilog和C语言类似,都因编写需要定义了一系列保留字,叫做关键字(或关键词)。这些保留字是识别语法的关键。1、Verilog所有关键字and always assign begin buf bufif0 bufif1 case casex casez cmos ...
2020-02-05 14:27:37
16590
原创 Verilog的运算符
目录1、算术运算符2、关系运算符3、逻辑运算符4、条件运算符5、位运算符6、移位运算符7、拼接运算符8、运算符的优先级Verilog中的运算符按照功能可以分为下述类型:1、算术运算符、 2、关系运算符、 3、逻辑运算符、 4、条件运算符、 5、位运算符、 6、移位运算符、 7、拼接运算符。1、算术运算符算术运算符,简单...
2020-02-05 14:07:22
28640
2
原创 Verilog语法基础知识
目录1、模块的结构1.1 模块的端口定义1.2 模块内容1.2.1 I/O说明的格式1.2.2 内部信号说明1.3 功能定义2、数据类型及其常量和变量2.1 常量2.1.1 数字2.1.2参数型2.3 变量2.3.1 wire型2.3.2 reg型2.3.3 memory型1、模块的结构Verilog结构位于在module和e...
2020-01-22 15:26:48
4163
原创 verilog全局变量和局部变量定义
1、局部变量定义(parameter)声明:parameter xx = 8;(注意有等号,且后面有分号)使用:xx作用域:parameter 作用于声明的那个文件。另外parameter可以用作例化时的参数传递。具体方法参见《Verilog例化时的参数传递》一文2.全局变量定义(`define )(注意撇号来自键盘左上方破浪线那个键,不是单引号)声明:`de...
2020-01-21 22:55:44
7267
1
原创 STM32串口配置
串口一void usart1_Init(u32 bound){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Pe...
2020-01-06 15:57:30
1060
原创 TFmini(TOF)在stm32上的应用
使用TFmini是采用串口通信,与STM32F103ZET6通信,同时在LCD上显示。通信协议使用出厂预设TFmini数据输出使用标准数据输出格式设置TFmini串口发送速率为20Hz(注意可使用串口工具修改TFmini参数,具体请参见对应操作手册)在LCD上显示距离、强度、接收到的9bit数据以及接收速率。注意:在本程序中使用标准库以及正点原子的LCD驱动程序ma...
2020-01-06 14:11:05
3574
16
常用电源芯片大全.pdf
2020-07-21
STM32关于I2S音频开发资料.zip
2020-07-21
BER-for-BPSK-in-Rayleigh-channel.m
2019-09-05
数字信号处理实验指导书
2018-11-15
2017全国大学生电子设计大赛题目
2018-11-13
王校长的S8冠军奖杯
2018-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人