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应用开发的学习笔记相关推荐

  1. STM32 LCD中英文字符显示学习笔记

    本实验基于STM32 LCD英文字符显示学习笔记. 开发板:野火指南者(STM32F103VE) STM32库版本:STM32F10x_StdPeriph_Lib_V3.5.0 IDE:KEIL5(代 ...

  2. 《鸟哥的Linux私房菜》个人学习笔记-第一篇

    <鸟哥的Linux私房菜>个人学习笔记-基础篇 这是一篇一个linux菜鸡自学的笔记 csdn上的各位大手子们好,本人实习生一枚最近想自己深入学习下linux,所以在社区里发博客,希望能记 ...

  3. STM32 CAN总线通信学习笔记(一)

    STM32 CAN总线通信学习笔记(一) 一.CAN总线简介 CAN 是控制器局域网络(Controller Area Network, CAN)的简称.CAN采用数据块编码的方式,数据块根据帧的类型 ...

  4. 【STM32】OV2640摄像头学习笔记 转

    [STM32]OV2640摄像头学习笔记 2019年03月03日 13:01:35 淹死的大白鲨 阅读数 4736更多 分类专栏: [STM32] 版权声明:本文为博主原创文章,遵循 CC 4.0 B ...

  5. 入门版XNA开发套件供玩家开发X360游戏

    美国微软于8月13日发表针对业余创作者所设计的游戏开发套件"XNA Game Studio Express",提供没有专门开发器材的一般PC Windows XP使用者开发跨Xbo ...

  6. 【聆思CSK6 视觉AI开发套件试用】开发环境与烧写问题解决

    本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动,更多开发板试用活动请关注极术社区网站.作者:ifconfig 抱歉这么晚才发文章,由于疫情被封在家了一个多星期,刚开始正常. 一.开 ...

  7. 《Qt5开发及实例 第二版》学习笔记(第1章Qt概述)

    前言: 由于工作安排开始使用QT开发,边学边写些笔记吧,欢迎大家交流. 选择QT的理由,最重要的就是跨平台,在这个快速发展的IT环境下(在学校java-web开发刚开始火,占了招聘半壁江山,现在都搞移 ...

  8. ROS集成开发环境 --- RoboWare(安装及学习笔记)

    后附 RoboWare中文教程网盘链接 Designer Studio Viewer RoboWare Studio是什么 v1.2.0 32位 deb v1.2.0 64位 deb v1.2.0 使 ...

  9. AI语音技能云开发(天猫精灵技能)学习笔记(结营)

    通过5天的学习,基本了解天猫精灵技能开发的流程,下面做一个小demo,作为结营作业 目标:购物清单中物品的价格查询 一.登录,进入控制台,创建新技能 天猫精灵开放平台首页 (aligenie.com) ...

  10. 基于百度英伟达EasyDL公开课的学习笔记

    本文是基于智东西公开课<零算法基础的百度EasyDL定制化图像识别揭秘>整理的学习笔记 本文非广告,标注单纯是出于尊重智东西和EasyDL的知识产权 如若涉及侵权,请联系本人 作者:李皮皮 ...

最新文章

  1. 「龙书」之后,又一编译佳作诚招译者
  2. 监控程序崩溃重启_第十四章 Homeassistant服务器安全及状态监控(下)
  3. 在云环境上使用SLF4J对Java程序进行日志记录
  4. neon浮点运算_ARM 浮点运算详解
  5. 浅谈三角带的使用及其分类
  6. MOSS 2007 错误0x80040E14解决
  7. IOS LocationManager定位国内偏移,火星坐标(GCJ-02)解决方法
  8. c语言的异步回调函数,C语言函数的回调函数
  9. Niushop 快递打印单模板设置
  10. c语言编写程序p1207.c,《C语言程序设计》(卷)考核班级
  11. win10电脑不小心卸载的软件怎么恢复
  12. BZOJ3894:文理分科
  13. bedtools 批量提取snp前后1000bp片段
  14. html监控页面大小,JQuery实时监控窗口大小(无需插件)
  15. CE认证电气间隙和爬电距离要求
  16. 树莓派4B-Python-控制DS18B20(温度传感器)
  17. DDoS 保护、缓解和防御:8 个基本技巧
  18. github ReadMe语法
  19. YzmCMS轻爽极简风格Eric模版源码
  20. 手机注册邮箱哪个好用?

热门文章

  1. pandoc 使用方法
  2. 7、共享模式的文件服务器
  3. 企业邮箱哪个最好用?企业邮箱哪个安全?
  4. 复化梯形公式matlab实验报告_复化梯形公式matlab
  5. ERROR StatusLogger No log4j2 configuration file found. Using default configuration解决方式
  6. html制作钟表盘,jquery+html5制作超酷的圆盘时钟表
  7. 2021-08-16
  8. Java中统计耗时的方法
  9. Java之网络编程(二)UDP
  10. linux时间同步服务(chronyd服务)