基于原子哥开发套件,STM32应用开发的学习笔记
1、学习与产品开发优选ST,原因如下
a、具备高性价比的ST系列单片机;
b、开源多,资料很多;许多问题在网上都能找到相关答案;
2、时钟(RCC寄存器)
a、系统时钟与RTC/独立看门狗是分开的;时钟源:HSI HSE LSI LSE PLL
b、初始化时注意时钟来源于频率大小;
c、PLL锁相环;CSS(监控器);MCO(输出时钟IO口);
d、AHB:总线时钟; APB1(低速时钟)、APB2(高速时钟):外设时钟;
e、配置时钟的一般流程:选择时钟源->选择分频/倍频->外设的分频(确定外设与系统时钟关系);
f、时钟配置的入口(启动文件):Reset_Handler;
3、485接口原理(SP485 MX485):电平转换
a、串口标准:TTL/CMOS(MCU串口) RS232C( EIA(±(5~15) ) DB9 10m) RS485(1200m) RS422 区别在于电压,阻抗;
b、逻辑1:+(2~6) 逻辑0:-(2~6);fuzhi
c、电路需要接120欧姆匹配电阻;
d、多对多关系:发送器、接收器:
4、CAN总线(协议层通讯结构,协议较为复杂,需要电平转换:TJA1050)
a、类似于485接口;
b、仲裁机制,错误排除机制;
c、采用协议(帧)的通讯方式;
d、二线制(实质与串口、SPI、IIC等都是类似的,只是在协议上的不同);
e、工作模式:
1)初始化模式,正常模式,睡眠模式;
f、测试模式:
1)回环测试:自发自收,但不接受CAN总线的数据;
2)静默模式:只收不发;
3)回环静默模式:自发自收(不接受也不发送数据到CAN总线);
5、触摸TAP
a、利用电容充放电原理,比较充电时间(有手接触的时候会长一点);
b、GPIO负责开关电路,形成充放电;利用定时器输入捕获功能检测;
6、触摸屏(LCD与触摸)
a、LCD(注意数据传输格式),与OLED控制方式相似的;
1)STM32利用FSCM接口来操作TFTLCD,2440利用专用硬件资源操作(支持STN TFT两种);
2)同样都是需要配置硬件寄存器达到控制LCD;
3)流程步骤相对简单,但是原理名词较多 : GRAM、显存像素分辨率(bit per pixel)、RGB格式(565 666);
4)字库的来源:ASCII、中文字库、图片(需要大内存装载);
5)通过叠加形式,产生许多组合效果;
b、触摸:
1)STM32采用专用IC(电容),利用IIC/SPI方式,2440利用专用硬件资源操作(ADC/触摸接口);
2)专用IC:电容屏才支持多触点(多个坐标读取);
3)2440操作专用寄存器,检测触摸按下松开有中断;
c、触摸与LCD的配合,需要依靠坐标转换实现;
7、摄像头(OV7670:DSP内核)
a、SCCB(类IIC)/IIC总线控制: Seril Camera Control Bus; SCCB 时序和 IIC 时序十分相似
b、控制项:图像质量、图像格式(尺寸)、数据格式、传输方式;
c、VGA:Video Graphics Array; CIF:
d、像素: 640*480=30W;
e、FIFO芯片:AL422B (384K字节,可以储存2帧QVGA图像数据)
f、读取数据策略:采用读取缓冲区数据方式(实现拍照功能);PS:直接读取太耗费CPU资源;
g、读取FIFO数据->将数据写入LCD缓冲区(循环76800次)->完成后复位FIFO,缓存下一帧照片;
h、 GPIO BSRR 和 BRR 两个寄存器,实现快速IO配置;
i、高速线:PCB布线一定要短;线材连线采用排线,尽量不用单根杜邦线;
8、外部SDRAM(IS62WV51216)
*具体的时序操作都有FSMC自动实现,软件上需要干预;
a、数据手册重点看时序图;
b、利用FSMC硬件资源连接SDRAM,进行访问;
c、静态,不需要刷新和时钟电路;支持高/低字节控制;
d、地址线:2^19=512K;
e、地址线是可以随意接的,不必按照顺序接;
f、重要的函数:一、init 二、read_buffer 三、write_buffer;
g、在传输16位字节数据的时候注意:输入的地址如果为奇数,则写入的速度将要减半;
9、内存管理(动态分配)
a、malloc free;
b、__align(4) u8 membase[MEM_MAX_SIZE];
c、__attribute__((at(0x5800000)))
d、类似用户储存管理机制;
10、SD卡
*SD/NAND FLASH/NOR FLASH对比:https://www.veryarm.com/1200.html
a、SD卡通讯简单,是单片机拓展外部内存的首选;
b、SDIO控制器:STM32自带标准SDIO接口资源,可以直接驱动
c、分类:MMC卡、SD储存卡、SD I/O卡和CE-ATA设备;4位、8位;
d、数据传输方式:数据块、数据流; 数据总线模式:1位、4位、8位;
e、SDIO的数据FIFO寄存器: 一共64个字节,读写只能读写32字节,并且必须4字节对齐进行内存操作;
f、SDIO的重要操作函数(3板斧): init、SDIO_ReadData、SDIO_WriteData;
g、低容量(SDSC):单字节寻址 大容量(SDHC):512字节寻址;
11、FATFS:一种文件管理软件资源
*API手册:http://elm-chan.org/fsw/ff/00index_e.html
*挂载(实质就是连接到相应的储存介质,文件系统将得到地址与名字标识符):https://zhidao.baidu.com/question/581631357.html
*常用的文件xito:FAT/FATFS(小型嵌入式应用) NTFS CDFS(光盘) exFAT Linux:jffs yaffs
*文件,实质就是文件系统帮你规定,整理好的内存空间(文件名+内容+属性信息等等的组织);
*可移植的小系统或者应用:1)配置顶层文件 2)实现硬件控制代码 3)本身实质的就是纯软件;
a、卷 扇区 盘符/卷标 ;支持的储存设备:磁盘、SD卡、FLASH、U盘
b、移植的三个步骤:a.数据类型定义 b.配置FATFS c.实现6个接口函数:
c、disk_initialize disk_status disk_read disk_write disk_ioctl get_fattime
d、使用FATFS前需要用f_mount挂接分区;
e、查看函数参数的输入值:a.例子 b.查看官方说明文档;
f、宏定义的或运算条件!!!!
g、f_readdir( );输入同一个目录,会自动偏移下一位;
12、汉字显示
* 汉字内码(GBK/GB2312) 、查找点阵库、解析、显示;
*实质就是查找特定数据的地址,然后显示;
*由于电脑的字体大小与单片机字体大小不是一一对应的,需要转换,因此需要生成字库;
a、编码:GB2312 GBK BIG5 ; 根据编码去查找字库,找到相应的码子矩阵数据,传输到LCD进行显示;
b、开发工作:字库的制作;
c、设计思路:将字库文件放在SD上,程序将字库文件转移到W25Q16,调用LCD显示接口进行显示;
13、图片显示(软件实现)
*图像的储存和取出:需要经过编码和解码,这样可以大大节省内存!!
*图片的压缩一般都是有损压缩;
*piclib.c 文件下提供各解码算法用的公用函数,并提供了一个显示函数的入口;
*开发工作:a、实现LCD显示接口 b、图片文件读取;
a、图片:BMP JPEG/JPG GIF; 利用对应的解码库进行解码->数据传输到LCD显示;
b、BMP格式的图片记录顺序:从左到右,从下到上; biBitCount1:黑白 biBitCount16:64K色;
c、piclib做了两件事:一、调用底层编码解码函数 二、指向LCD底层函数;
d、读取图片策略:读取一个文件夹下的所有图片,保存索引(文件名),实现下一张,上一张;
14、拍照功能
a、读取LCD显示的图像信息,并调用BMP编码函数,创建BMP格式文件,并储存在储存介质中去;
b、数据的处理;
15、手写识别(识别原理需要大量时间去精通)
*识别算法需要高速的MCU处理器以及大内存方可;
a、识别过程:训练学习过程、识别过程;
b、LDA线性判别分析; 降维:512维降至64维
c、八方向特征提取操作;
d、初始化识别程序->获取输入的点阵数据(如何获取?)->调用alientek_ncr函数,得到识别结果->终止识别->识别完成;
e、重要的算法是由库的形式给出;
f、所需资源: FLASH:52K RAM:6K;
16、图片、音频、视频都是按照一定格式储存的,因此都会涉及到编码、解码
*音乐播放器:VS1053(DSP内核高处理速度芯片)
*针对不同文件格式有不同的开源编解码
a、音频解码芯片:MPS/OGG/WMA/FLAC(需要加载patch)/WAV/AAC/MIDI;
b、输出输入端:
1)输入端:可变采样率的立体声ADC(支持咪头或线路输入) ;
2)输出端:一个高性能立体声音DAC及音频耳机放大器;
c、涉及文件处理;
d、与mplayer的区别:
1)文件处理方式:FATFS文件系统,读取文件信息;
2)LCD图片处理方式;
3)数量级处理;
e、细看源码处理;
f、数据的处理过程:定义一个缓冲区4096字节,从SD卡或其他储存媒介读取出来并通过SPI接口发到VS1053中去;
17、录音机处理:VS1053
*码率、声道;
a、WAV文件格式说明:块的标志符(4个ASCII)、数据大小(4BYTES)、数据
b、低字节在前,高字节在后;
c、音频格式数据的处理要详细参考;
d、数据的处理过程:定义一个缓冲区512字节,满了之后储存到SD或其他储存媒介中;
18、T9拼音输入法
a、实现的算法:联想出一系列同中字组合的次,各种组合;
b、实现步骤:输入字符串->查找拼音索引表->显示匹配清单里面的所有字->用户选择匹配项;
c、搜狗输入法:a、联想功能,热词搜索; b.存在词库;
d、匹配算法,好好思考; UI显示->触摸位置获取->获取按键值->进行匹配算法;
e、搜索算法详细参考;
19、IAP在程序中编程 (类似Linux的U-boot)
*程序下载的三个方式:a、JTAG/SWD b、ISP(选择启动方式) c、IAP(实现远程烧写)
*实现IAP程序升级,需要设计两个项目代码,第一个程序代码( Bootloader )通过USB USART等接收程序或者数据,执行对第二部分代码的更新,而第二个项目代码(APP)是真正的应用程序代码;
*IAP程序必须满足两个要求:
a、新程序必须在IAP程序之后的某个偏移量为x(必须为0x200的倍数)的地址开始;
b、必须将新程序的中断向量表相应地移动,移动的偏移量为x;
1)HEX文件包括了地址+数据信息,bin文件只包含数据信息;https://blog.csdn.net/sinat_16169043/article/details/79193056
20、USB虚拟串口
USB学习:《圈圈教你玩USB》
*协议十分复杂,即软件要遵循USB规范;
*端点? 端点1用于虚拟串口发送 端点3用于虚拟串口接受 详细说明: https://www.sohu.com/a/212683131_777180
a、USB :Universal serial bus,
b、主机:D-/+接1.5K电阻到地,USB设备(从机):低速设备D-接1.5K到电源 反之 D+
c、使用专用的数据缓冲区传输数据(512字节);不能CAN 同时使用;
d、开发工作:移植修改USB驱动程序;
e、模拟串口需要安装虚拟驱动;
21、重要架构图
1、时钟架构:
2、STM32的内存分布:
3、STM32 第二目标代码,即APP代码段运行图:
4、CAN总线结构:
5、OV7670功能框图:
6、OV7670时序图:
7、手写识别:
基于原子哥开发套件,STM32应用开发的学习笔记相关推荐
- STM32 LCD中英文字符显示学习笔记
本实验基于STM32 LCD英文字符显示学习笔记. 开发板:野火指南者(STM32F103VE) STM32库版本:STM32F10x_StdPeriph_Lib_V3.5.0 IDE:KEIL5(代 ...
- 《鸟哥的Linux私房菜》个人学习笔记-第一篇
<鸟哥的Linux私房菜>个人学习笔记-基础篇 这是一篇一个linux菜鸡自学的笔记 csdn上的各位大手子们好,本人实习生一枚最近想自己深入学习下linux,所以在社区里发博客,希望能记 ...
- STM32 CAN总线通信学习笔记(一)
STM32 CAN总线通信学习笔记(一) 一.CAN总线简介 CAN 是控制器局域网络(Controller Area Network, CAN)的简称.CAN采用数据块编码的方式,数据块根据帧的类型 ...
- 【STM32】OV2640摄像头学习笔记 转
[STM32]OV2640摄像头学习笔记 2019年03月03日 13:01:35 淹死的大白鲨 阅读数 4736更多 分类专栏: [STM32] 版权声明:本文为博主原创文章,遵循 CC 4.0 B ...
- 入门版XNA开发套件供玩家开发X360游戏
美国微软于8月13日发表针对业余创作者所设计的游戏开发套件"XNA Game Studio Express",提供没有专门开发器材的一般PC Windows XP使用者开发跨Xbo ...
- 【聆思CSK6 视觉AI开发套件试用】开发环境与烧写问题解决
本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动,更多开发板试用活动请关注极术社区网站.作者:ifconfig 抱歉这么晚才发文章,由于疫情被封在家了一个多星期,刚开始正常. 一.开 ...
- 《Qt5开发及实例 第二版》学习笔记(第1章Qt概述)
前言: 由于工作安排开始使用QT开发,边学边写些笔记吧,欢迎大家交流. 选择QT的理由,最重要的就是跨平台,在这个快速发展的IT环境下(在学校java-web开发刚开始火,占了招聘半壁江山,现在都搞移 ...
- ROS集成开发环境 --- RoboWare(安装及学习笔记)
后附 RoboWare中文教程网盘链接 Designer Studio Viewer RoboWare Studio是什么 v1.2.0 32位 deb v1.2.0 64位 deb v1.2.0 使 ...
- AI语音技能云开发(天猫精灵技能)学习笔记(结营)
通过5天的学习,基本了解天猫精灵技能开发的流程,下面做一个小demo,作为结营作业 目标:购物清单中物品的价格查询 一.登录,进入控制台,创建新技能 天猫精灵开放平台首页 (aligenie.com) ...
- 基于百度英伟达EasyDL公开课的学习笔记
本文是基于智东西公开课<零算法基础的百度EasyDL定制化图像识别揭秘>整理的学习笔记 本文非广告,标注单纯是出于尊重智东西和EasyDL的知识产权 如若涉及侵权,请联系本人 作者:李皮皮 ...
最新文章
- 「龙书」之后,又一编译佳作诚招译者
- 监控程序崩溃重启_第十四章 Homeassistant服务器安全及状态监控(下)
- 在云环境上使用SLF4J对Java程序进行日志记录
- neon浮点运算_ARM 浮点运算详解
- 浅谈三角带的使用及其分类
- MOSS 2007 错误0x80040E14解决
- IOS LocationManager定位国内偏移,火星坐标(GCJ-02)解决方法
- c语言的异步回调函数,C语言函数的回调函数
- Niushop 快递打印单模板设置
- c语言编写程序p1207.c,《C语言程序设计》(卷)考核班级
- win10电脑不小心卸载的软件怎么恢复
- BZOJ3894:文理分科
- bedtools 批量提取snp前后1000bp片段
- html监控页面大小,JQuery实时监控窗口大小(无需插件)
- CE认证电气间隙和爬电距离要求
- 树莓派4B-Python-控制DS18B20(温度传感器)
- DDoS 保护、缓解和防御:8 个基本技巧
- github ReadMe语法
- YzmCMS轻爽极简风格Eric模版源码
- 手机注册邮箱哪个好用?