- 博客(232)
- 资源 (62)
- 收藏
- 关注
原创 NUC970 裸机USBD驱动(第一章)
官方提供的USBD驱动太随意,根本没法直接使用,折腾好久原因是我的开发板上面使用了一个很老的HUB芯片,是USB1.1的,导致没法使用USB2.0,后续测试都是基于USB1.1的,实际上USB2.0会更简单,因为支持的bluk可以支持512字节,USB1.1只有64字节,但是实际使用中除了速度区别,别的区别不大,因为NUC970的USB接收缓冲区非常方便,比如实际上bluk只有64字节,但是设置缓冲区大小512字节,也可以非常容易的接收512字节及以上的数据包,只要主机OUT,设备会自动接收,但是也有个问题
2020-10-18 09:17:29 1344 2
原创 单片机裸机移植sqlite3
上一篇文章中提供了vfs支持,此处主要是sqlite3移植所需的线程,信号量支持,sqlite3源码在官方下载,需要很大的内存支持,移植基本原理就是实现sqlite3所需的linux api接口即可,可以通过宏定义去掉一些不用的功能,减少API依赖。ucos_iii_pthread.c/***********************************************************************************************************
2020-10-10 08:26:12 2706 3
原创 基于FATFS底层实现的虚拟文件系统VFS接口(用于裸机移植sqlite3)
sqlite3移植所需的文件系统支持,采用的VFS接口,只实现了一些基本接口,对于属性与权限接口则未实现具体功能,由于FATFS文件系统没有权限管理,VFS主要是linux上面使用的,这里还是有区别,而且裸机情况下也不需要什么权限管理。需要用户堆支持。ff_vfs.c/************************************************************************************************************* *.
2020-10-10 08:19:20 1654
原创 NUC970 SD卡驱动(SDIO)
在读取SD卡的R2长响应折腾了不少时间,原因是必须开启DMA,不开启DMA,R2响应将不会传输到SDIO的FIFO中,将SDIO接口与STM32保持一致,并兼容应用层SDIO_SDCARD驱动。寄存器地址//SDIO========================================================================================================#define SDIO_BUFF_BASE
2020-09-13 09:12:50 1377
原创 FTP上传调试记录,主动模式与被动模式
FTP分为主动模式与被动模式,在VC++ CLR中的FtpWebRequest UsePassive进行设置,默认是true也就是被动模式,设置为false则为主动模式。reqFTP->UsePassive = false; //选择主动还是被动模式-主动模式。主动模式与被动模式区别,比如现在告诉你用8080端口作为FTP:主动模式下:客户端使用8080作为命令连接,发送一些命令到服务器,同时发送一个 PORT 192,168,1,240 63,75给服务器,告诉服务器,我的IP是...
2020-09-12 15:44:56 814 1
原创 VC++ FTP创建目录并上传文件
首先判断FTP服务器中是否存在相应的目录,如果存在,则上传文件,如果不存在,则先创建目录,并上传文件。//FTP操作相关#pragma once#include "SystemLog.h"#include "RealTimer.h"using namespace System;using namespace System::Net;using namespace System::IO;using namespace System::Globalization;using namesp
2020-09-08 08:28:11 782
原创 NUC970(ARM9) UCOSIII移植
ARM9与 A7移植差不多,都比STM32简单,区别在于ARM9开关中断不一样,一些新指令不支持,并且NUC970没有VFP,无法使用硬件浮点运算,因此无需保存S0-S31这些寄存器,堆栈消耗也会少一些。//在.S文件中使用UCOS提供的中断管理startus.s ;/*************************************************************************** ; * .
2020-09-02 08:48:28 1220 6
原创 NUC970(ARM9)裸机SPI驱动
NUC970的SPI寄存器足够简单,但是没有DMA支持有点遗憾,现在SPI也算高速设备了,一个4线的SPI FLASH都支持100MHz时钟,400Mbit的速度了,靠中断肯定是不行的,目前NUC970所支持的几种存储器里面,估计只能靠TF或者eMMC了,毕竟有DAM支持,nand flash现在用的少,占用IO也多,速度也就那样,块还出奇的大,还要自己做写均衡,坏块管理,eMMC都是BGA封装,目前有个这种的SD NAND使用的SDIO接口的大容量flash,兼容SD卡驱动,可以实现QFN-8封装的1-.
2020-09-02 08:29:33 969
原创 全志V3S裸机ucosiii,使用的DDR启动
已经完成了DDR初始化,串口初始化,GIC,定时等,并且移植了ucosiii.工程下载地址:https://download.csdn.net/download/cp1300/12786660
2020-08-31 11:39:42 2459
原创 NUC970(ARM9)裸机定时器驱动
定时器结构比较简单,只需要初始化3个寄存器即可,但是需要使用AIC中断控制器//定时器基址//TIM========================================================================================================#define TIMER0_BASE (0xB8001000) //寄存器基址#define TIMER1_BASE (
2020-08-31 11:13:07 531 2
原创 NUC970(ARM9)裸机串口驱动与中断控制器AIC
裸机调试时,需要使用到SDRAM,需要使用JTAG,首先将芯片启动方式设置为USB,然后安装USB驱动 “WinUSB4NuVCOM_NUC970”,最后运行软件 NuWriter选择芯片连接设备连接成功后串口会有提示还需要在MDK中添加DDR初始化脚本,我使用的是unlink2,不知道jlinkv9是否是一样的脚本直接选择仿真,不要点击下载串口测试将收到的数据原封不动发送回来,只测试过串口0,其余的串口理论上操作一样下面是代码uart.c/****
2020-08-31 08:47:10 1497 1
原创 NUC970(ARM9)裸机启动文件
裸机启动,初始化堆栈,用户堆,以及关闭中断等操作 ;/*************************************************************************** ; * * ; * Copyright (c) 2020 NUC970裸机启动文件. * ; *
2020-08-30 17:02:12 1058
原创 全志V3S裸机串口驱动(中断方式接收,DMA接收有问题,小于32字节数据无法触发DMA传输)
调试DMA接收遇到了个很奇怪的问题,就是DMA发送没问题,DMA接收的时候,如果数据小于32字节,数据被DMA从串口接收FIFO中取走了,但是并不会传输到指定的buff中,这个就没法用于接收未知长度的数据,问题还在研究中,估计应该是DMA中有FIFO导致的,这个在全志的资料中找不到任何信息。串口基址 UART0 0x01C28000 UART1 0x01C28400 UART2 0.
2020-08-19 17:16:05 2579 5
原创 全志V3S裸机 SDRAM内存初始化(并使用SDRAM启动仿真)
全志V3S自带64MB内部DDR II RAM,但是官方手持上面没有任何信息,不知道如何操作,通过查找xboot以及uboot代码,找到了初始化代码,很复杂。//dram.c/************************************************************************************************************* * 文件名 :aw_v3s_map.h * 功能 :全志V3S寄存器映射 *
2020-08-16 07:59:21 3603
原创 全志v3s裸机 寄存器映射
用于裸机下寄存器操作的地址映射以及数据类型定义typedef.h使用的是STM32里面的,一直用的很顺手。//typedef.h/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************* File Name : stm32f10x_type.h* Author : MCD Application Team* Version
2020-08-16 07:48:02 2092
原创 全志V3S裸机启动
全志v3s裸机启动需要初始化堆栈,需要使用汇编代码,这个是从NXP官方例程中借鉴进行修改的,启动后先关闭中断,cache,mmu等,然后初始化堆栈指针,3个不同状态下的堆栈,中断模式,SVC模式,正常模式下的堆栈。我是使用IAR进行开发的,这个.S文件只能用于IAR.//startup.s MODULE ?cstartup ;; Forward declaration of sections. SECTION CSTACK:DATA:NORO
2020-08-16 07:44:43 6379
转载 jLink(v8)GDB 命令总结
当我们使用jLink调试Cortex-A9及以下核心的时候,往往会使用eclipse CDT+GDB插件+GDB Server的形式调试程序。下面罗列一下jLink支持的GDB命令,来源于Segger公司的UM08001_JLink.pdf,在这里精简,以供备忘。不再支持的指令:Note1:The remote commands arecase-insensitive.Note2:Optionalparameters are set into square brac...
2020-08-03 14:47:01 1761
原创 安装openssh-server报错 E: Sub-process /usr/bin/dpkg returned an error code (1)
在ubuntu core 14上面安装openssh报错,之前是可以用的,我重新卸载后重装报各种错误,最后按照网上很多办法进行了尝试都无解。重新安装报错(正在读取数据库 ... 系统当前共安装有 107977 个文件和目录。)正准备解包 .../openssh-client_1%3a7.2p2-4ubuntu2.10_armhf.deb ...正在解包 openssh-client (1:7.2p2-4ubuntu2.10) ...正在选中未选择的软件包 ncurses-term。正准备解
2020-07-22 14:39:15 4278
原创 STM32F4 flash写入偶尔出现的异常调试
今天在新的设备上,使用XMODEM协议下载升级问题,之前用了很多年都没出问题,突然在这个F4上面出问题了,单独调用都是好的,最后通过不断的调试发现原因,以前写入FLASH都是调用单字节或者单字烧写,最近修改了一个底层函数,批量写入多个字,由于写入的数据如果不是32bit对齐,就会出现异常,刚好xmodem协议前面有3个字节头,刚好不是4字节对齐。//128B数据包格式typedef struct{ u8 X_Start; u8 X_PackNum; u8 X_bPackNum; u8 X_
2020-06-29 16:23:32 3270
原创 通过加速度与磁力计计算方位角
通过加速度传感器与磁力计计算方位角,实现电子罗盘功能,网上很多都是通过加速度,磁力计,陀螺仪去混合计算,太复杂了,而且现在我用的传感器只有加速度与磁力计,我只需要水平的方位角,实现电子罗盘功能。//计算旋转角static float getYaw(float accVals[3], float magVals[3]) { float roll = (float)atan2(ac...
2020-04-30 09:38:59 6895 6
原创 STM32F7 LTDC快速切换(重载)图层画面撕裂问题解决
想模拟手机切屏动画,测试发现切换图层时出现画面撕裂问题.最后测试发现问题在重载设置问题我默认使用的BTI0进行立即重载,这个时候LCD可能正在更新数据,如果此时重载就会直接切换到新的图层,就会发现图层被撕裂不完整,如果用BTI1进行重载,就可以避免这个问题,因为在垂直消隐时重载,相当于当前一个画面已经刷新完了,再切换到另外一个画面,这个相当于电脑上面的垂直同步功能,这样就可以避免画面被...
2020-03-15 08:07:05 2574 4
原创 ARGB Alpha像素混合(透明图片叠加像素计算)
alpha混合计算方法很多,我这个使用的是最常用的计算方法.//ARGB 格式数据定义typedef struct{ u8 mB; u8 mG; u8 mR; u8 mA;}ARGB_DATA_TYPE;//进行2个像素混合,必须是ARGB888格式void ARGB8888_PixelMixing(ARGB_DATA_TYPE* pInB...
2020-03-14 09:03:15 2355
原创 STM32F7 DAM2D alpha像素混合(同时有对应的软件Alpha像素混合代码)
alpha像素混合可以在一个图层上面显示另外一张带透明的图片,以上一篇文章中的ICO图标解析为例.//ICO解码所需的填充接口-会执行像素混合void ICO_FillPoint_CallBack(GRAM_HANDLE* pHandle, u16 OffsetX, u16 OffsetY, void* pSourceImage, u16 SourceWidth, u16 SourceH...
2020-03-14 08:46:13 628
原创 STM32 ICO图标解析(支持透明度)
测试环境为STM32F7,支持2个图层,可以支持图层之间显示透明度,测试方法为底层显示背景图标,顶层显示需要显示透明的图标,如果在单个图层显示,需要自己实现alpha混合,混合需要读取之前的像素,与要写入的像素进行混合,混合方法也比较简单可以网上查,或者我的上一篇文章https://blog.csdn.net/cp1300/article/details/104748720里面有用到像素混合...
2020-03-12 08:55:42 2177
原创 WIN32虚拟STM32F7 LCD屏幕(WIN32虚拟单片机)
//虚拟STM32F7 的LTDC,使用dx3d实现显存操作,软件实现透明图层叠加/************************************************************************************************************* * 文件名 : stm32f7_ltdc.c * 功能 : 虚拟STM32F7...
2020-03-09 11:33:36 1077
原创 STM32 tjpgd软件JPEG解码后RGB888数据格式问题
在STM32上面使用TJPGD解码后,发现RGB888的数据格式与单片机或常规的RGB格式顺序有区别,测试发现格式为BGR888,因此对源码进行了修改。在头文件中增加一个宏定义,可以选择#define JD_FORMAT_SWAP_RB 1 //将RGB888数据的R与B进行交换,由于原始输出的数据,R在低字节,转换为RGB888实际格式是BGR(LSB)//定义一个24bit RG...
2020-03-03 17:36:15 2000
原创 win32移植FATFS,使用windows API读取磁盘镜像文件
首先使用DiskGenius 建立一个.img格式的磁盘映像文件,我虚拟了一个256MB的SD卡,如下并格式化为FAT32文件系统,可以使用DiskGenius打开并拷贝数据。使用windows API实现底层虚拟SD卡的读写操作。//代码如下/*--------------------------------------------------------------...
2020-03-03 17:31:16 1060 1
原创 FATFS简单封装
将FATFS常用函数进行了封装,方便使用/************************************************************************************************************* * 文件名 : FileSystem.c * 功能 : 文件系统相关函数 * 作者 : [email protected]...
2020-02-20 19:29:01 828
原创 STM32F7 SAI驱动
使用的是开发板上面的SAI2A,连接的WM8994,使用的DMA双缓冲传输/************************************************************************************************************* * 文件名 : stm32f7_sai.c * 功能 : STM32F7 SAI接口驱动...
2020-02-20 17:02:06 4398
原创 STM32F7 DMA驱动
之前已经写过了,这次做的灵活一些,例子看我后面发的SAI驱动,使用的是DMA双缓冲模式。//DMA外设结构static const DMA_TypeDef * const DMA_TYPE_BUFF[2] = {DMA1, DMA2};static const DMA_Stream_TypeDef *DMA1_Stream[8] = {DMA1_Stream0, DMA1_Stream...
2020-02-20 16:59:30 1063
原创 WM8994驱动 STM32 WM8994驱动( STM32f746gdiscovery WM8994驱动)
描述WM8994 是一款高度集成的超低功耗高保真 CODEC,专为智能手机和其他具有丰富多媒体功能的便携式设备而设计。 集成的立体声 D/AB 扬声器驱动器和 W 类耳机驱动器,可最大限度降低音频播放期间的功耗。 该器件只需要两个电压电源,所有其他内部电源均由集成 LDO 生成。 立体声全双工异步采样率转换和多通道数字混合,加上强大的模拟混合功能,使器件能够支持各种不同的架构和用例。 ...
2020-02-19 21:40:23 3397
原创 bmp图片分段加载问题调试记录-遇到了STM32 SDIO DMA对齐问题
问题描述:1.一次性加载所有图片数据到内存,并解析,一切正常。2.采用512字节以内(一次读取一个扇区内的数据),分段加载,解析,一切正常,正常图片如下。3.当我使用4096B缓冲区时(会一次读取多个扇区),解析图片就出现问题了,症状如下:出现了很多条纹,通过调试分析应该是出现了字节错位,期初以为是算法问题,通过不断的调试发现算法没问题,最后就怀疑是否是原始数据出问题了,但...
2020-02-19 12:19:09 868
原创 STM32F7 硬件IIC驱动
目前只实现了主设备模式,一般也只用到主设备模式,IIC如果不能使用硬件方式,读取大量数据的时候效率很大,由于只有1个字节的缓冲区,根本不能使用中断模式(实际使用过程中,IIC会造成100us以内间隔的中断,单片机根本扛不住的),所以建议数据少就直接阻塞,1个字节也就几十us,数据多直接用DMA,将线程阻塞,等待DMA传输完成,而不会阻塞CPU(上传的代码没有实现DMA部分,便于理解)。目前已经...
2020-02-16 19:40:28 2548
原创 STM32f746gdiscovery 触摸屏 FT5336 驱动
由于网上找不到这个触摸屏 FT5336芯片的寄存器信息,只能从别人的驱动中找到寄存器信息,还好只需要配置个把寄存器,然后直接读取坐标信息即可,支持5个触摸点坐标读取。原理图部分,芯片采用IIC通讯,地址为:0x70,2个IIC数据线,1个中断线,测试也比较简单,读取id寄存器0xA8,如果读取到数据为0x51,那么恭喜你,基本通讯已经成功了。代码如下:/*************...
2020-02-16 16:50:36 3614 3
原创 直接赋值与结构体赋值效率差异
一直想直接用结构体,把所有相关的函数都放进去(通过函数指针,然后把函数赋值给函数指针),这样对外使用的时候就一个结构体把相关的函数都集合到一起了,很像类一样,而且方便函数补全,只要结构体名称,点后面就会出现所有的成员,方便选择,如果直接是函数,记不清前面开头还得去寻找。最近有个小工具就是写成结构体方式对外调用,见:https://blog.csdn.net/cp1300/article/det...
2020-02-15 22:03:13 1392 1
原创 WM8994软件IIC调试怪异问题-已经解决(2020-02-15)
使用官方demo,硬件IIC可以正常与WM8994通讯,而我这个使用了几年的软件IIC却无法正常通讯,表现为设备地址0x34能正常发送,能正确响应ACK,如果后续的16bit(2个字节)的地址与16bit(2个字节)的数据,BIT0,BIT8有一个1的话,就无法完成通讯。比如发送0xFEFE是没问题的,如果是0xFFFF或者0x0001或者0x0100之类,只要BIT0或BIT8有1则不...
2020-02-14 13:48:49 632
原创 WM8994寄存器列表(花了点时间整理的,总共800行,寄存器实在太多了)
寄存器地址 寄存器名称 中文名称 bit 标签 默认值 描述 初始值 说明 R0 (00h) Software Reset 软复位 0.625 SW_RESET[15:0] 0x8994 写入该寄存器会复位所有寄存器为默认值; 读取为设备id:0x8994 R1 (01h) ...
2020-02-13 12:07:25 2149
原创 STM32F4/F7 32位定时器实现的 计时器 StopWatch
STM32F4或者STM32F7有2个32位定时器,非常适合用来做高精度的时间测量,既可以保证精度,又可以保证量程,测试使用定时器5(32位定时器),实现1us精度的时间测量,函数格式类似于StopWatch类。/******************************************************************************************...
2020-02-09 14:16:52 2162 2
原创 STM32F7 内部flash操作启动
总体来说与STM32F4操作是一样的,就是扇区大小变化了,测试过程中发现当PG=1之后立即写入数据到flash会造成编程顺序错误,通过增加一个nop的延时即可解决此问题,还可以通过将多个数据连续烧写的方式避免此问题,就是当PG=1之后,把所有数据都烧写完成后再将PG=0,不要频繁的开关。/****************************************************...
2020-02-09 07:42:10 1767
原创 STM32F7 硬件CRC校验驱动,支持CRC7,CRC8,CRC16,CRC32
本来想实现32bit写入,一次进行4字节校验,结果测试过程中发现兼容性不好,最后放弃了,统一使用字节模式写入。已经实现了硬件的CRC7,CRC8,CRC16,CRC32运算,并且均进行了测试对比,计算结果完全正确,通过配置可以实现不同的CRC校验,我已经实现了如下的配置:///////////////////////////////////////////////////////////...
2020-02-08 16:27:27 3336 3
A7139发送数据工程 STM32 A7139模块
2023-02-26
nuc970_UCOS_III_MDK.rar
2020-09-02
v3s裸机工程.rar
2020-08-31
nuc970裸机_MDK.rar
2020-08-31
WinUSB4NuVCOM_NUC970+NuWriter.rar
2020-08-31
DLT645-2007国网多功能电能表通信协议.doc
2020-07-03
虚拟STM32F746 RGB_480x272彩屏.rar
2020-03-09
WM8994 WISCESetup.rar
2020-02-19
WM8994_Rev4.6.pdf
2020-02-13
homebridge-aqara测试.rar
2019-11-21
串口读写上位机例程
2018-05-06
DS-5_Workshop DS-5工程建立
2014-06-21
ds-5_vybrid_freescale_ws
2014-06-21
S3C6410 SD卡启动裸机代码,可以从串口下载程序
2013-12-10
reshack3.6中文版
2012-12-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人