- 博客(80)
- 收藏
- 关注
原创 75、stm32定时器PWM输出指定脉冲数
要想生成固定脉冲数可以使用PWM中断计数判断,但是这个方案在频率高时就会不准,并且占用CPU;还有一个办法就是使用定时器A输出PWM,并且驱动定时器B计数,计数到达脉冲数时触发中断,并且关闭定时器;
2024-04-28 17:35:26 757
原创 69、FIFO缓存发送数据(先入先出)
本文件用于设备数据收发缓冲使用,本fifo采用申请2片内存区,交替使用,写0时1读,写1时0读,避免同时使用相同内存块。此方法的弊端为,当FIFO输入数据速度大于输出,则会引起数据丢失,若只是短时间数据量大则可以通过分配较大空间避免此问题。链接:https://pan.baidu.com/s/1-u8w19RiyPeCtVQjX8hzgw。fifo区域采用头尾相连的方式循环覆盖,分别记录读和写的位置,相等则数据为空,否则说明有数据。
2024-03-22 16:01:45 644
原创 67、自定义通信帧协议解析
帧标识A 类型 备注A0x0F 长帧 数据长度2字节短帧:帧标识 帧标识取反 帧用户数据字节数 用户数据…用户数据长帧:帧标识 帧标识取反 帧用户数据字节数(高8位) 帧用户数据字节数(低8位) 用户数据…用户数据注意:帧标识符应尽量避免使用0x00/0xFF,因为出现概率过高,容易误识别。
2024-03-20 11:57:32 275
原创 29、分块式内存管理[malloc、free]
注:使用内存分配memory_malloc()\memory_realloc()后,不使用此资源后需使用memory_free()释放内存,避免内存泄露|不够。内存管理自身消耗内存=单个内存表4字节 * 内存块数 + sizeof(memory_manage_StructDef) + 地址对齐损失字节数。3、调用memory_init()初始化内存管理(可以修改单个内存块字节大小,dAlign_Byte的整数倍)内存块0 内存块1 内存块2 …内存表0 内存表1 内存表2 …*file:内存管理文件。
2023-10-24 10:41:39 244
原创 9.2CubeMx配置SD卡FATFS系统_stm32H7系列 SD卡 FR_NO_FILESYSTEM 找不到FatFs系统的问题
/挂载盘符A】会出现f_mount挂载SD卡返回没有文件系统FR_NO_FILESYSTEM,但是SD卡是有文件系统的,即使接着格式化SD卡你会出现问题(retSD = f_mkfs(SDPath,0,0,work,sizeof(work));这时,就需要手动打开两个宏定义ENABLE_SD_DMA_CACHE_MAINTENANCE 、ENABLE_SCRATCH_BUFFER。开启宏ENABLE_SD_DMA_CACHE_MAINTENANCE、ENABLE_SCRATCH_BUFFER。
2023-10-13 14:31:03 3248 4
原创 20、stm32使用FMC驱动SDRAM(IS42S32800G-6BLI)
stm32使用FMC驱动SDRAM(IS42S32800G-6BLI)
2023-08-10 20:08:22 1389
原创 11、STM32H7 MPU Cache
MPU内存保护,STM32H750使用FMC控制LCD数据异常 使用STM32H7的FMC注意MPU配置 透写和回写缓存
2023-04-19 09:52:51 1459
原创 10、STM32H750驱动W5500
本文会利用W5500实现服务器,并自动分配网络IP地址,使用SPI轮询方式和SPI+DMA方式,实现网络通信不会讲解W5500代码,只是快速搭建。
2023-03-16 13:44:49 2135 1
原创 3、按键扫描检测处理
按键动作分长按、短按(弹起时执行)两种 按下不放执行长按,但松开按键时不予执行短按函数 多个按键可以同时操作 按键引脚会自动配置软件上下拉
2023-02-16 11:02:40 1597 1
原创 CubeMx DMA笔记
定时器开DMA关于DMA初始代码:主函数启动:关于tim.c全部代码:关于DMA使用的外设地址一定需要满足DMA的传输限制:比如此图中的DMA1是不能访问AHB1外设的,也就是比如不能DMA1搬移GPIOC\GPIOB等外设的数据传输...
2022-06-27 14:24:42 488
原创 opencv图像通道分离与合并
源码:void QuickDemo::channels_demo(Mat &image){ std::vector<Mat> mv; split(image, mv);//通道分离 imshow("蓝色",mv[0]); imshow("绿色", mv[1]); imshow("红色", mv[2]); Mat dst; mv[0] = 0; merge(mv, dst); imshow("混合",dst);//图像合并 int from_to[] = {0,
2022-05-24 09:31:42 1277
原创 opencv图像像素算术运算+逻辑运算
void QuickDemo::OperatorTest(Mat &image){ Mat res; Mat m1 = Mat::zeros(image.size(), image.type()); m1 = Scalar(50, 50, 50); add(image, m1, res);//加法 imshow("add",res); subtract(image,m1,res);//减法 imshow("subtract",res); m1 = Scalar(2,2,2);
2022-05-23 20:05:25 416
原创 opencv滤镜效果使用applyColorMap函数
源码:void QuickDemo::color_style_demo(Mat &image){ Mat dst = Mat::zeros(image.size(), image.type()); int i = 0; for (i = 0; i < 19; i++) { applyColorMap(image, dst, i); imshow("colorstyle",dst); waitKey(500); }}函数applyColorMap()函数原型:
2022-05-23 19:02:24 511
原创 opencv使用Track Bar调节控件
说明:使用Track Bar调节图片亮度1、创建Track Bar函数函数原型:CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,int* value, int count,TrackbarCallback onChange = 0,void* userdata = 0);@功能:创建跟踪条并将其附加到指定的窗口函数createTrackbar用指定的名称创建一个tr
2022-05-23 16:26:16 338
原创 openCV Mat类及遍历像素点
源码:void QuickDemo::CreateTest(Mat &image){ Mat m1,m2,cvt; m1 = image;//image.clone();//克隆图像 image.copyTo(m2);//复制image图像给m2 Mat m3 = Mat::zeros(Size(8, 8), CV_8UC3);//创建一个大小为8*8的图像,3个通道,并且全部赋值0;全部赋值1用ones m3 = Scalar(0,0,255);//对每个像素点按0,0,255赋
2022-05-21 15:44:27 1113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人