- 博客(30)
- 收藏
- 关注
原创 怎么在stm32上跑自己的神经网络
基本步骤为先跑出神经网络得到xxx.h5文件,然后用cubemx把h5文件移植到stm32中,然后初始化设置输入输出,实时输入数据进行神经网络检测,需要做的工作主要有:会写或者会改神经网络代码,输出.h5文件(使用Tesoroflow产生得有版本要求,太高得可能不行),使用cubemx来移植到stm32上;1、 自行上网查询stm32AI教程,网上90%的教程会教到能把官方例程跑出来,使用cubemx进行验证(跑不出来,检查步骤有无错误,时钟设置是否正确,串口设置是否正确)
2024-06-04 20:21:15
3501
原创 嵌入式C语言学习笔记(6)-- 函数
函数通俗理解就是一堆代码的集合,用一个标签来描述它,用于需要的地方复用。一般具有承上启下的作用,输入一些东西操作之后再输出一些东西。函数一般包括三要素:1、函数名(函数地址标签)2、输入参数 3、返回值由于函数名为一块特殊地址的标签,则可以用指针描述函数int (*p)(int, int, char);//右边()告诉指针P是函数类型的指针,输出参数为int int char 类型的,左边告诉指针P返回值为int类型的。以例子可以实现printf的功能。函数的参数的传递函数的调用一般有调用者和
2022-01-08 21:47:15
769
原创 嵌入式C语言学习笔记(5)-- 空间分布
空间分布字节对齐可以用一个图来概括:需要注意的是:1、各个空间变量的生存时间2、代码段和常数段都是只读段如果更改会出现段错误3、定义变量要注意:大小 默认方式 在那放4、堆空间:运行时才有,运行时可以自由分配和释放的空间,生存时间由程序员决定分配;5、 malloc(),一旦成功,返回分配好的地址,只需要接收,对于这个地址的读法,由程序员决定,输入参数指定分配的大小,单位就是B。申请完用完记得释放,不然会造成内存泄漏,有申请不成功的可能一般申请方式如下char *p;p = (char
2021-12-11 16:32:57
851
原创 嵌入式C语言学习笔记(4)-- 指针、数组空间初始化
指针指针变量通俗的理解就是存放地址的盒子,也就是说指针指向内存空间的地址,但要注意的是指针指向内存空间的低地址。例如:以下例子是一个字节的方式读地址,输出78使用一般原则:C语言使用指针要有有2个疑问?1、分配一个盒子,盒子要多大?在32bit系统中。指针就4个字节2、盒子里存放的地址所指向内存的读取方法是什么?是int 还是char等等;另外还要注意的有:指针读取内存尽量使用无符号指针 ;操作指针时一定要确定指针指向的类型和指针类型相同;指针指向的地址一定要保证合法存在;一般
2021-12-03 17:45:47
582
原创 嵌入式C语言学习笔记(3)-- 类型修饰符、逻辑运算符
类型修饰符 -- 总的来说就是对内存资源存放位置的限定auto :默认情况分配内存可读可写的区域,区域在{}中一般认为为栈空间对分配的内存修饰。例如:auto int aregister:限制变量定义在寄存器中的修饰符,可以定义一些快速访问的变量,如果寄存器不够时a任然会放到存储器中。&对register是无效的。简单的说就是修饰的变量优先放在寄存器中,如果寄存器没有位置,就放在储存器中。例:register int a。static:静态应用场景:1、 修饰函数内部变量(局部)I
2021-11-28 14:45:18
625
原创 嵌入式C语言学习笔记(2)--关键字-数据类型
关键字可以通俗的理解为编译器预先定义的有意义的字符串,不需要用户自己定义编译。今天所学习的内容使关键字中的数据类型,可能不会对每一个数据类型进行讨论,只是说明一些嵌入式开发时容易错误使用的数据类型。数据类型1、boolbool不是基本的数据类型,是在stdbool.h库中定义的一个数据类型,非常简单只有0和非0,需要注意的是一切不为0的都会被认为1.2、char硬件芯片操作的最小单位:bit ,一个bit只有0和1。在软件代码编写时,一般操作的最小单位是:B,而char a就是一个字节 =
2021-11-27 21:00:40
687
原创 嵌入式C语言学习笔记(1)-- 预处理的使用
一、宏定义宏可以理解为替换,替换过程不会进行语法检查,语法检查在编译时进行。1.不带参数的宏定义:宏定义又称为宏代换、宏替换,简称“宏”。实质为直接替换,宏名一般为大写。例:#defined PI 3.14152.带参数的宏:#define 宏名(参数表) 文本例如:#define S(a,b) a*b需要注意的是:如果宏替换运算式或者函数一般要加上()错误使用如:#defined test 5+3printf("5倍test = %d", test * 5); 实则计算的是:
2021-11-27 19:48:02
657
原创 定时器下ADC采集向内存双缓冲DMA传输
定时器下ADC采集向内存双缓冲DMA传输前言配置前言本文主要接上篇ADC多通道采集DAM传输配置,配置大致一样,这篇主要讲的是单通道采集双缓冲传输。先说一下为什么使用双缓冲,一般来说我们不会同时对一个内存区域同时进行两种或者多种操作,但是很多场景需要我们进行同时操作的,我们不可能时候都等对一块内存区域等它写满之后再往Flash上搬,这时候我们可与i利用双缓冲模式,即当缓冲buff1满了先往buff2上写,然后操作buff1,这样就解决了上面的问题。DMA自带的有双缓冲模式,但是我在正点原子的F4
2021-08-18 21:33:28
1877
原创 STM32 F429 DMA传输2-ADC多通道采集DMA传输
STM32 F429 DMA传输2-ADC多通道采集DMA传输前言配置前言这篇主要是和上一篇做对比学习,上一篇是储存器到串口DMA传输,这篇是adc采集到存储器的DMA传输,两个对比学习,方便理解。和上篇一样,我们在配置中学习参数以及函数原理。配置1)使能 DMA、ADC 时钟。2) 初始化 DMA、ADC参数。3)将DAM与ADC联系起来(这个上篇忘着重提了)4)使能 ADC、DMA ,启动传输。以下是具有配置代码DMA相关配置void myDMA_init(DMA_Stream_T
2021-08-14 16:10:31
1543
8
原创 STM32 F429 DMA传输1-串口(外设)DMA传输
STM32 F429 DMA传输1-串口(外设)DMA传输主要内容如何配置各参数含义及配置细节主要内容本文主要是我自己记录DMA配置过程函数以及参数细节,同时与需要的人分享学习,对于DMA的作用、定义之类的在这不进行阐述,有需要者参考中文手册。为方便对比学习,我分三部分分享我在正点原子f429板子上写的关于DMA的程序,从官方历程到扩展使用分别为:1、由内存向串口(外设)DMA传输;2、由ADC采集数据(内存)向内存DMA传输;3、定时器下ADC采集向内存双缓冲DMA传输;本文只对第一部分进行
2021-08-13 17:56:51
1385
原创 较为容易理解的MUSIC算法DOA估计
较为容易理解的MUSIC算法DOA估计MUSIC算法原理信道模型MUSIC算法估计MUSIC算法原理首先我们要理解的是MUSIC算法,是一种估计角度的算法,也就是一种估计角度的方法,如果初次理解DOA估计,可以先跳过这种算法去理解DOA估计。( DOA) 是 指 无 线 电 波 到 达 天 线阵列的方向,在这里我们需要用一种方法估计出无线电波到达天线阵列的方向,我们使用的这种方法叫做MUSIC算法。MUSIC算法原理:主要是根据特征分解后得到两组正交的特征向量组。且由前D个大特征值对应的特征向量张成
2021-06-29 20:35:23
20459
15
原创 变量(全局变量、局部变量和静态变量)的作用域
变量的作用范围取决于变量的定义位置1.局部变量(动态储存)1、仅能在它所定义的语句块内有效例如:第一个x,为零的作用域为定义它的语句块作用域(红色格格),里面的为橙色格格。2、作用域较小的局部变量隐藏作用域较大的局部变量例如:上图里的运算结果:此时 int x = 1, y = 1;作用域较小会隐藏 x = 0, y = 0;的作用域。全局变量(静态储存)从此程序开始到此程...
2019-11-24 17:17:38
11286
原创 RT-Thread 内核小细节
RTT内核小细节1. 信号量:信号量是根据初始值分层的,例如信号量创建时初始值为2,那么可以在不释放信号量的情况下被获取两次此信号量。释放一次信号量信号量的值(semaphore->value)就会加一,获取一次信号量的值就会减掉一,为零则不能获取,被挂起。2.邮箱:使用if(rt_mb_recv(&mb,(rt_uint32_t*)&str,RT_WAITING_...
2019-11-22 14:36:18
501
原创 STM32 SPI设备实现及驱动分析(裸机 &&RT-Thread)
1、spi基本介绍SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口,是一种高速的,全双工,同步的通信总线。SPI 接口一般使用 4 条线通信:MISO 主设备数据输入,从设备数据输出。MOSI 主设备数据输出,从设备数据输入。SCLK 时钟信号,由主设备产生。CS 从设备片选信号,由主设备控制。SPI总线框架其实和I2C差不...
2019-11-18 20:11:16
2120
原创 STM32应用文件系统--W25Q256(RTT系统)
1. 在 meunconfig 中开启 DFS elmfatfs2. 在 menuconfig 中开启 libc3. meunconfig 中开启 SPI Flash4. 将 W25Q128 注册成块设备5. 文件系统的挂载操作还是比较简单的:在 meunconfig 中开启 DFS elmfatfs使用 Env 工具进入 rt-thread\bsp\stm32f429-ap...
2019-11-15 10:57:06
3393
2
原创 RT-thread基础移植//依据rtt实战学习记录
主要任务有以下几点:任务 1:BSP 跑起来任务 2:完成报警模块任务 3:完成按键模块任务 4:完成温湿度传感器的驱动和明显各个任务是层层递进的,并且有易到难,今天是第一天,由于上课的原因,我只完成了前面两个相对容易的任务。!任务一:个人认为这个任务主要是针对开发板的移植在这里我介绍两种方法:1、直接从 CubeMX 中导入该软件包2、在官网下载rtthreadd源码。两种...
2019-10-15 10:51:02
882
原创 RT-Thread 外部中断的设置
关于rtt的外部中断设置官网又专门的文档介绍 ,我这里就不多做介绍了 pin设备但我在使用的时候遇到一个小问题,问题:外部中断设置边沿触发就进入不了中断,设置别的就可以;主要代码如下:void key_pin_0(void * args){ if(rt_pin_read(key_0)) { led_off(); } else { ...
2019-10-15 10:29:33
3798
原创 RT-Thread 移植是stm32F429 pwm例程
估计来到这里的小伙伴都应该和我差不多,刚开始把rtt移植到stm32上,在用env配置的时候多少会遇到一些问题,我也是不会自己瞎搞搞出来了(哈哈哈,没办法,太菜了),所以希望你们更轻松点。好了我们进入正题。在开始之前需要 :1、env配置好 env配置教程2、示例代码下载好代码链接3、开发板4、STM32CubeMX (直接搜索官网就可以了)准备好后就可以开始了这里我以f4...
2019-09-25 21:56:36
1991
转载 很多人不了解的嵌入式C高级用法
转自网络 原文地址1、内存管理我们需要知道——变量,其实是内存地址的一个抽像名字罢了。在静态编译的程序中,所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的,只知道地址。内存的使用时程序设计中需要考虑的重要因素之一,这不仅由于系统内存是有限的(尤其在嵌入式系统中),而且内存分配也会直接影响到程序的效率。因此,我们要对C语言中的内存管理,有个系统的了解。在C语言中,定义了4个...
2019-09-11 20:39:21
419
原创 RT-thread笔记--线程创建详解
众所周知RT-Thread 操作系统的线程当中,一共有两种--静态线程和是动态线程,而RT-Thread 中的线程一般由三部分组成:线程代码(函数)、 线程控制块、 线程堆栈那线程的创建又是怎么实现的呢?首先咱们先看一下静态线程的创建,代码是这样的:rt_err_t rt_thread_init(struct rt_thread* thread, ...
2019-09-10 19:54:56
1513
原创 RT-thread 笔记(一)
#include <rthw.h>#include <rtthread.h>#define THREAD_PRIORITY 20#define THREAD_STACK_SIZE 512#define THREAD_TIMESLICE 5/* 同时访问的全局变量 */static rt_uint32_t cnt = 0;void t...
2019-09-03 16:13:13
745
原创 C++图形时钟(画图入门篇)
C++图形时钟(画图入门篇)第一次接触制作窗口画图感觉还不错,听老师讲过后写的,希望对大家有帮助。本次工程是制作一个圆形和方形时钟,涉及画图操作,先介绍一下画图库(ACLLib)的用到的函数;1.图形库的介绍(这里只介绍此工程用到的函数,想额外了解的可以百度此库的名称)ACLLib是一个基于Win32API的函数库,提供了相对较为简单的方式来做Windows程序,同时也是一个C语言图形库...
2019-07-14 16:05:23
6715
1
原创 stm32f1串口通信(两串口之间互相通信以及USART_SendData函数的bug)
stm32f1串口通信(两串口之间互相通信以及USART_SendData函数的bug)简要功能串口识别另一串口的内容然后进行相应回应(以“521” “1314”为例)主要函数介绍(相关串口配置初始化网上代码很多,几乎也都差不多,我在这里也不介绍了,但是需要注意的是串口二的配置串口时钟和GPIOA的时钟不在一条总线上,两串口中断优先级也会有一定的影响。)串口中断接受立即发送 *...
2019-07-10 11:26:13
19563
7
原创 蓝桥矩阵按键
#include “reg52.h”#define temp P3sfr P4=0xc0;sbit P42=P4^2;sbit P44=P4^4;extern unsigned char key_value;void keyscan_mat(){unsigned int key_press;P3 = 0x0f;P44 = 0;P42 = 0;if(temp != 0x0f)...
2019-03-21 09:43:21
244
原创 蓝桥杯单片机笔记—各个驱动使用
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
2019-03-21 09:32:34
474
接收端也需要设置相应的套接字并监听指定的端口,以便接收广播数据包 同时,需要处理数据包,如解码音频或视频流,进行播放 5-4
2024-08-27
接收端也需要设置相应的套接字并监听指定的端口,以便接收广播数据包 同时,需要处理数据包,如解码音频或视频流,进行播放 5-3
2024-08-27
在C语言中,套接字是实现网络通信的基本接口 通过创建套接字,我们可以连接到远程服务器或监听来自其他设备的连接请求 6666
2024-08-27
5-2.zip 在发送流媒体数据时
2024-08-27
在IT行业中,流媒体广播是一种将音视频内容实时传输到多个接收端的技术,常用于在线直播、电视广播等场景 5555555555555
2024-08-27
在IT行业中,流媒体广播是一种将音视频内容实时传输到多个接收端的技术,常用于在线直播、44444444444444
2024-08-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人