![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32
文章平均质量分 89
light_2025
Looking back, there is no regret !
展开
-
STM32F4_LCD显示汉字
LCD显示汉字和显示图片、数字、字符的原理是一样的,都是将汉字、图片、数字以及字符转换点阵,进而通过函数扫描点阵在LCD上显示;原创 2023-06-10 15:35:23 · 6535 阅读 · 8 评论 -
STM32F4_LCD显示图片
LCD 显示数字和字符的原理都是将数字和字符转换成点阵,通过函数扫描点阵进而在LCD上显示,LCD显示图片的原理也是如此,将图片转换成若干点阵,进而通过函数进行扫描,正点官方提供了图片转换成点阵的工具。本程序基于正点的STM32F4系列;原创 2023-06-10 11:24:35 · 3515 阅读 · 4 评论 -
STM32F4_通过RS232实现和PC端通讯
1. 接口的信号电平较高(-15V~+15V),易损坏接口电路芯片,又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接。后来1BM的PC机将RS232简化成了 DB-9 连接器,再后来成了事实的标准(就像我们家用的三头插座一样,火线、零线、地线);USB 端接电脑USB接口,DB-9 接口接自己的开发板,至于是公头还是母头,根据自己的开发板选择即可;,标准中对连接器的每个引脚的作用都加以规定,同时也对信号的电平加以规定。通过上一节的学习,已经基本了解了RS232的通讯过程,原创 2023-06-10 10:14:14 · 3596 阅读 · 1 评论 -
STM32F4_软件模拟SPI
(更通俗易懂点就是:第一次交换时,SCK高电平期间,主机的最高位1放到MOSI数据线上,从机的最低位1放到MISO数据线上,SCK低电平期间,MOSI数据线上的数据移至从机的最低位,MISO数据线上的数据移至主机的最低位,这样经过8次循环,就可以完成一个字节的交换,并且每次循环都会将最低位的值逐步移到移位寄存器的最高位,保证了SPI高位在前的原则)(所有程序都是基于W25Q64芯片的)这篇博客是建立在硬件驱动SPI的基础上的进行扩充的,如有关于SPI的疑问,请移至本博客开头的SPI协议详解!原创 2023-06-04 20:29:42 · 4045 阅读 · 0 评论 -
STM32F4_LCD/OLED在线取字模软件
在进行(单片机)嵌入式开发的时候,我们为了调试方便,通常会使用 OLED / LCD / 串口助手 等去帮助我们调试程序,常常会使用到 LCD 或 OLED 点阵字模,下面是搜集到的几个在线取字模的软件,希望能对使用者产生一定的帮助!!!其中包括简体汉字字模、ASCII字模、繁体汉字字模、图像取模软件、16进制数据转图像或文字软件;原创 2023-06-01 15:18:43 · 8386 阅读 · 0 评论 -
STM32F4_指针(单片机)
也就是说指针和char型、int型、float型一样,都是一个变量类型。p=p+5 指针向下移动五个数据宽度。p=p-5 指针向上移动五个数据宽度。与底层硬件联系密切,使用指针可操作数据的地址,实现数据的间接访问。//定义了一个指向int型数据的指针。是C语言的一个重要知识点,其使用灵活、功能强大,是C语言的灵魂。//定义了一个int型数据。:p=&a 表示将数据a的地址赋值给p。:*p 表示取出指针指向的数据单元。:p++ 指针向下移动一个数据宽度。:p-- 指针向上移动一个数据宽度。原创 2023-05-29 20:18:16 · 1527 阅读 · 0 评论 -
STM32F4_光敏传感器
光传感器不只局限于对光的探测,它还可以作为探测元件组成其他传感器,对许多非电量进行检测,只要将这些非电量转换为光信号的变化即可。光敏电阻串联在电流中,在光敏电阻的两端,通常加上合适的电压,在没有光照的条件下,光敏电阻的阻值接近于无穷大,相当于断路,当在一定的光照强度下, 光敏电阻的阻值减少,电流对应增大,足够的光照强度使得光敏电阻所在的支路相当于短路。就是光敏二极管,R58为其提供反向电压,当环境光线变化时,LSI 两端的电压也会随之变化,通过ADC3_IN5通道,读取LIGHT_SENSOR上面的电压;原创 2023-05-12 08:40:00 · 2864 阅读 · 3 评论 -
STM32F4_内部温度传感器
其实质是根据这些液体和气体在热和冷的对流中沉降到底部而发射辐射能,或者检测以红外辐射(太阳)形式从物体上传输的辐射能。显然需要与被感测对象进行物理上的接触,由此进行温度上的传导,并且以此来检测温度变化。这种接触方式下的传感器可以在很宽的温度范围内检测固体、液体和气体。因为温度传感器是接在ADC1_IN16上的,所以需要读取通道16的传感器电压值,用公式计算出温度值即可。我们已经学习过了ADC1的设置方法,在设置ADC1的代码基础上加上使能内部温度传感器函数即可。是至ADC1_IN16的输入。原创 2023-05-12 08:31:39 · 1760 阅读 · 2 评论 -
STM32F4_待机唤醒详解
进入待机模式,首先设置SLEEPDEEP位,接着通过PWR_CR设置PDDS位,使得CPU进入深度睡眠时进入待机模式,最后执行WFI指令开始进入待机模式,并等待WK_UP(KEY_UP)中断的到来;:对于已经使能了RTC中断或者RTC唤醒中断的情况,必须先禁止中断,清除相关中断标志位,清除唤醒中断WK_UP,等一切都完成以后,再次使能中断,进入低功耗模式。:在这三种低功耗模式中,最低功耗的是待机模式,在此模式下,最低只需要2.2uA左右的电流。要进一步降低停止模式的功耗,可将内部调压器设置为低功耗模式。原创 2023-05-11 10:10:45 · 5989 阅读 · 0 评论 -
STM32F4_随机数发生器(RNG)
按照FIPS PUB(联邦信息处理标准出版物)140-2的要求,将RNGEN位置1后产生的第一个随机数不应使用,应保存起来,与产生的下一个随机数进行比较。当将大量种子引入RNG_LFSR后,RNG_LFSR的内容会传给数据寄存器(RNG_DR)。1:RNG_DR 寄存器包含有效随机数据 注意:如果 RNG_CR 寄存器中 IE = 1,则会挂起中断。通过以上的分析,我们明确了在读取随机数值之前,必须先判断状态寄存器的最低位DRDY是否为1,如果该位为1,则可以读取数据寄存器的随机数值;原创 2023-05-10 21:09:53 · 2468 阅读 · 0 评论 -
STM32F4_十进制和BCD码的转换
比方说十进制下的66,66/10=6次,也就是说修正了6次,这里修正次数的意思是,出现一次十六进制下溢出9,就修正一次,(溢出第一次来到10-15,溢出第二次来到20-25,依次类推,总共溢出了6次,就是这个道理),所以需要加上6*6=36,所以最终的BCD码为66+36=102;如果相加的值位于20-25之间,则需要修正2次,也就是加上2*6=12;:二进制是逢二进一,十进制是逢十进一,十六进制是逢十六进一,它们之间每次都差6,所以一个十进制想要转换成BCD码,必须先要算清楚进了几次位;原创 2023-05-06 10:15:38 · 1870 阅读 · 0 评论 -
STM32F4_RTC实时时钟
当日历的亚秒、秒、分、小时、日期分别与闹钟寄存器RTC_ALRMASSR/RTC_ALRMAR和RTC_ALRMBSSR/RTC_ALRMBR中的值匹配时,则可以产生闹钟。STM32F4的RTC日历时间(RTC_TR)和日期(RTC_DR)寄存器,用于存储时间和日期,也可以用于设置时间和日期,可以通过与PCLK1同步的影子寄存器来访问,这些时间和日期寄存器也可以直接访问。RTC寄存器为32位寄存器。这两个函数的实质就是读取RTC_TR和RTC_DR寄存器的时间和日期的值,然后将值存放到相应的结构体中。原创 2023-05-06 10:01:21 · 5021 阅读 · 9 评论 -
STM32F4_USMART调试组件
因此,我们可以随意的更改函数输入参数(支持数字(10/16进制),支持负数、字符串、函数入口地址等作为参数),单个函数最多支持 10 个输入参数,并支持函数返回值显示。通过多条发送中的6和7可以看到开发板上的LED1会亮,这也就是USMART的优越性所在,并不需要通过MDK调试下载程序到单片机的Flash中,只需要借助USMART通过串口助手即可将调试程序发送给单片机,大大增强了单片机寿命;函数的第一个参数是从串口接收到的数组USART_RX_BUF,第二个参数是串口接收的状态USART_RX_STA。原创 2023-05-04 22:18:33 · 2091 阅读 · 0 评论 -
STM32F4_SRAM中调试代码
写入到 RAM 存储器中,下载速度比内部 FLASH 要快的多,而且没有擦除过程,因此在 RAM 中调试程序时程序几乎是秒下的,对于那些大型程序,并且需要频繁更改的程序,能节省很多时间。因此使用系统存储器启动方式时,内核会执行该代码,该代码运行时,会为ISP提供支持(In System Program),如检测USART1/3、CAN2及USB通讯接口传输过来的信息,并根据这些信息更新自己内部Flash的内容,达到升级产品应用程序的目的,因此这种启动方式也称为。注意ROM的地址是紧跟着RAM的。原创 2023-04-26 17:31:21 · 794 阅读 · 0 评论 -
STM32F4_模数转换器(ADC)详解
ADC需要若干个ADC_CLK周期完成对输入的模拟量进行采样,采样的周期数可通过ADC采样时间寄存器ADC_SMPR1和ADC_SMPR2的SMPx[2:0]位设置,ADC_SMPR2控制的是通道0~9,ADC_SMPR1控制的是通道10~17。STM32F4的ADC在单次转换模式下,只执行一次转换,该模式可通过ADC_CR2寄存器的ADON位(只适用于规则通道)启动,也可以通过外部触发启动(适用于规则通道和注入通道),这时CONT位为0。必须在ADC_SQRx寄存器中选择转换序列的规则通道及其顺序。原创 2023-04-21 17:33:00 · 7139 阅读 · 2 评论 -
STM32F4_LCD液晶显示详解
在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。但是需要注意的是:本节使用到的3种寄存器并不像我们以往使用的寄存器,本节的3个寄存器的定义在MDK寄存器中是没有被单独定义的;不同尺寸的LCD对应不同的分辨率;独立的读写时序控制,我们在初始化的时候配置好,之后就不用再配置了;该指令用于读取GRAM,控制器在收到该指令后,第一次输出的是dnmmy数据,该数据的无效的,该数据是为了保证LCD收到数据一致的;原创 2023-04-26 15:50:38 · 1736 阅读 · 0 评论 -
STM32F4_OLED显示
该指令也包含2个字节,第一个为命令字,第二个为设置值,第二个字节的BIT2表示电荷泵的开关状态,该位为1,则开启电荷泵,为0则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。:第一个读到的字节丢弃不要,从第二个开始,才是我们真正上要读的数据。用于设置对比度,这个命令包含了两个字节,第一个0X81为命令,随后发送的一个字节为要设置的对比度的值。,该命令用于设置页地址,其低三位的值对应着GRAM的页地址。,使得微控制器的操作频率和显存的操作频率相匹配。命令/数据标志(0,读写命令;原创 2023-04-18 20:49:10 · 1717 阅读 · 6 评论 -
STM32F4_电容触摸按键
随着电子的累积,电压值也不断的增加,电阻R两端的电压变为V1和Vt,电容两端的电压都会变成Vt;此时,电阻R两端仍然存在电压差,会有源源不断的电子流经电容,电容两端的电压Vt不断增大,电容持续充电。先10次调用TPAD_Get_Val()函数获取10次充电时间,然后获取中间N(N等于8或者6)次的平均值,作为在没有电容触摸按键按下的时候的充电时间比较值tpad_default_val;,因为电阻R两端的电压的压差在不断的减少,因此充电的效率会相应的变低,所以该曲线的变化趋势越来越平缓。原创 2023-04-13 15:23:01 · 1343 阅读 · 0 评论 -
STM32F4_定时器输入捕获详解
如果发生捕获事件时CCxIF标志已经处于高位1,那么会将重复捕获标志状态寄存器的CCxOF位置1。可以通过写程序的方式给CCxIF位写入0来将CCxIF位清0,或者读取存储在TIMx_CCRx寄存器中的已捕获数据。)的时候,将当前定时器的值TIMx_CNT存放到对应通道的捕获/比较寄存器TIMx_CCRx里面,完成一次捕获。如果至少发生了两次连续捕获,但CC1IF标志未被清0,则CC1OF捕获溢出标志位会被置1。发生有效跳变沿时,TIMx_CCR1寄存器会获取计数器的值,保存下来。发生捕获事件时,会将。原创 2023-04-11 20:55:22 · 6253 阅读 · 11 评论 -
STM32F4_PWM输出详解
根据对PWM输出原理图的学习,如果我们希望LED灯逐渐亮,又逐渐暗,呈现一个变化趋势。也可以理解为在一个10s周期内,我让LED亮7s,灭3s,那么循环呈现给视觉的效果就是灯相对比较亮;而如果我让LED亮3s,灭7s,结果呈现给视觉的效果就是LED比较暗。将计数器TIMx_CNT的值TIMx_CCRx寄存器的值进行比较,通过比较的结果输出高低电平,实现PWM输出信号。,利用微处理器的数字输出(DAC)来对模拟电路进行控制的一种非常有效的技术。本章PWM输出就是利用定时器PWM输出比较功能实现的。原创 2023-04-11 15:24:54 · 5418 阅读 · 0 评论 -
STM32F4_定时器精讲(TIM)
给定计数器一个初值,每当计数一次,就会走过一个固定的时间(等同于我们的钟表,固定的进行扫描),当达到我们给定的初值时,该定时器就完成了自己的使命,产生定时器中断,执行中断函数中的程序命令(等同于闹钟响了,提醒我们该做更重要的事是一个意思)。每当发生N+1个计数器上溢或下溢(其中,N是TIMx_RCR重复计数器寄存器中的值),数据就从预装载寄存器转移到影子寄存器(TIMx_ARR 自动重载寄存器、 TIMx_PSC 预分频器寄存器以及比较模式下的 TIMx_CCRx 捕获/比较寄存器);原创 2023-04-11 14:31:17 · 6281 阅读 · 4 评论 -
STM32F4_窗口看门狗精讲(WWDG)
是在0~重载值之间任何时间段都可以喂狗,如果在这个时间段程序死循环结束,或者说程序跑飞之后又跑回正常,这时候恰好又刷新了看门狗,这种情况下独立看门狗是检测不到复位芯片的;但是窗口看门狗不同,严格限时了喂狗的时间,即使程序跑飞又跑回正常,只要不在限定的时间窗口内,MCU都会产生复位。之所以这么讲,是因为在计数器值为0x40时使用EWI中断,不仅仅可以用来管理软件系统检查/或系统恢复/功能退化,也可以使用相应的中断服务程序ISR来重载WWDG计数器以避免WWDG复位。:在系统复位后,看门狗总是处于关闭状态。原创 2023-04-10 21:09:38 · 2265 阅读 · 0 评论 -
STM32F4_独立看门狗详解(IWDG)
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界的电磁波干扰,造成程序的跑飞,从而陷入到死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,LED0常量,如果KEY_UP按下,就进行独立看门狗喂狗,只要看门狗不停的按,看门狗就不会产生复位,保持LED0常量,一旦超过了看门狗的溢出时间还没按,就会导致程序重启,LED熄灭一次。//重载计数器的值到IWDG计数器中,避免其复位。原创 2023-04-09 22:21:55 · 1897 阅读 · 0 评论 -
STM32F4_外部中断详解(EXTI)
将中断线0 与GPIOA映射起来,那么GPIOA.0与EXTI 1中断线连接了。因此,KEY_UP负责外部中断0的中断服务函数的检测,KEY2负责外部中断2的服务函数的中断检测,KEY1负责外部中断3的服务函数的中断检测,KEY0负责外部中断4的服务函数的中断检测;在对上述的理解上需要基于上述图,外部EXTI0是控制PA0/PB0/PC0/PD0/PE0/PF0……:连接到USB OTG HS(在FS中配置)唤醒事件。1. 每个中断/事件线上都具有独立的触发和屏蔽。:连接到RTC唤醒事件。原创 2023-04-06 20:25:55 · 6176 阅读 · 5 评论 -
STM32F4_串口通信详解
字符是可以一个接着一个传输,但是每组信息(也称为信息帧)的开始要加上同步字符,在没有信息传输时,需要加上空字符,因为同步通信是不允许有间隙的。在中断过程中,判断中断是哪种中断,使用的函数是:ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);//接受数据,从 DR 读取接收到的数据。原创 2023-04-05 21:22:54 · 5382 阅读 · 1 评论 -
STM32F4_按键输入实验
程序2: static 的作用是保留上一次 flag 的值,并且后续调用 getValue 时,跳过 static int flag=0 的代码;读取IO口输入电平方法:PEin(4)----读取GPIOE.4口电平 PEin(n)----读取 GPIOE.n 口电平;KEY1->PE3,上拉输入;KEY2->PE2,上拉输入;就是输入的电平不会上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在。就是输入的电平不会上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在。原创 2023-04-04 20:37:11 · 2432 阅读 · 0 评论 -
STM32F4_时钟系统精讲
当减到0以后,重装载寄存器会重装载到定义的值,也就是回到定义的数值,源源不断的进行减减;,LSI 低速内部时钟供到独立看门狗使用,32KHz,同时接到RTCSEL上,图中梯形形状代表着选择作用,也就是RTC可以选择LSE低速外部时钟使能,也可以选择LSI,在这里,通常选择LSE,因为LSE外接晶振,精度较高;对于CPU来说,时钟的频率越高,其时钟值越小,这里可以理解时钟是一个信号的周期,时钟=1/f,频率越高,时钟越小,也就是单位时间内 CPU 能够做到更多的事,也就是我们常说的CPU运行快;原创 2023-04-03 21:18:29 · 3163 阅读 · 0 评论 -
STM32F4_蜂鸣器实验
当出现电流偏高的情况时,可能对开发板一供电,GPIO内部处于一种上电状态,很不稳定,电流就会经NPN三极管放大后流入蜂鸣器,进而出现一通电蜂鸣器就会产生噪声;我们知道,MCU单片机 IO口 的电流非常小,绝大多数起到控制作用,达不到驱动作用,尤其是对蜂鸣器等高耗能设备;所以需要通过三极管的放大作用对 IO口 的电流起到放大作用,蜂鸣器接到三极管的集电极,采用NPN型三极管;1. 当PF8输出高电平的时候,蜂鸣器将发声,当PF8输出低电平的时候,蜂鸣器停止发声。不同的外设调用的时钟使能的函数可能不一样;原创 2023-04-03 19:29:57 · 1612 阅读 · 0 评论 -
STM32F4_跑马灯实验
LED模块的原理图通过VCC3.3V进行供电,模块最下边的LED_PWR左侧接地,右侧接上510R的上拉电阻(LED_PWR右侧直接呈现高电平),此时LED_PWR天生具有电势差,即VCC3.3V一旦供电,PWR就会亮,所以LED_PWR作为电源灯,STM32F4xx板子一旦供电,LED_PWR就会亮;,只需要把GPIO_SetBits(GPIOF,GPIO_Pin_9)和GPIO_ResetBits(GPIOF,GPIO_Pin_9)改为GPIO_SetBits(GPIOF,原创 2023-03-29 09:23:18 · 1726 阅读 · 2 评论 -
STM32F4_网络通信(网口)
STM32F4 芯片自带以太网模块,该模块包括带有专用 DMA 控制器的 MAC 802.3(介质访问控制)控制器,支持介质独立接口(MII)和简化介质独立接口(RMII),并自带了一个用于外部PHY通信的SMI接口,通过一组配置寄存器,用户可以为 MAC 控制器和 DMA 控制器选择所需的模式和功能。STM32F4必须外接PHY芯片,才可以完成以太网通信,外部PHY芯片可以通过 MII/RMII 接口与STM32F4 内部MAC连接,并且支持 SMI (MDIO&MDC)接口配置外部以太网PHY芯片。原创 2023-10-22 20:41:17 · 6550 阅读 · 0 评论 -
STM32F4_USB读卡器(USB_Slave)/USB U盘(Host)
的缩写,是一个外部总线标准,用以规范电脑与外部设备的连接和通讯。,同时支持从机功能和主机功能,完全符合USB 2.0规范的On-The-Go(就是OTG,实现在没有Host主机的情况下,实现设备间的数据传送)补充标准。根据之前的学习,我们知道如果是高速设备,那么D+上会接一个1.5K的上拉电阻到VCC,如果是低速设备,那么D-上会接一个1.5K的上拉电阻到VCC;主机模式下,OTG FS支持全速(FS,12Mb/s)和低速(LS,1.5Mb/s)收发器,在从机模式下仅支持全速(FS,12Mb/s)收发器。原创 2023-10-22 20:40:49 · 3879 阅读 · 0 评论 -
STM32F4_串口 IAP
在执行完 IAP 以后(也就是将新的 APP 代码写入STM32F4 的 FALSH,也就是上图中灰底的部分,新程序的复位中断向量起始地址为0x08000004+N+M),跳转至新写入程序的复位向量表,取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至新程序的 main 函数,如图标号 ②和③ 所示;这样一来,整个STM32F4的SRAM分配情况为:最开始的4K给BootLoader程序使用,随后的100K存放APP程序,最后24K,用作 APP 程序的内存。原创 2023-07-18 16:00:35 · 805 阅读 · 0 评论 -
STM32F4_音乐播放器
只在部分chunk中用到,如 “WAVE chunk” 中,它表示的意义是下面嵌套有别的chunk,当使用了 “类型块标识” 时,该chunk中就没有别的项(如块标志等,数据大小等),它只作为文件读取时的一个标识(类似于链表中的指针域,指向下一个数据域,起一个导向的作用)。,该寄存器要设置ROUT1EN(bit8),LOUT1EN(bit7)和SLEEP(bit6)等三个位,ROUT1EN 和 LOUT1EN,设置为 1,使能耳机输出,SLEEP 设置为 0,进入正 常工作模式。作为标示(注意有个空格!原创 2023-10-22 19:38:15 · 1973 阅读 · 0 评论 -
STM32F4_照相机
依 次循环(此时的数据处理,是通过 DMA 传输完成中断实现的,在中断里面处理),直到帧中断, 结束一帧数据的采集,读取剩余数据到外部 SRAM,完成一次 JPEG 数据的采集。M0AR,M1AR所指向的内存,必须是内部内存,不过由于采用了双缓冲机制,我们不必定义一个很大的数组,一次性接收所以的JPEG数据了,而是可以分批次接收,数组可以定义的比较小。我们要保存 BMP,当然要存放在某个地方(文件),所以需要先创建文件,同时先保存 BMP 位图信息,之后才开始 BMP 数据的写入。原创 2023-10-22 19:37:42 · 226 阅读 · 0 评论 -
STM32F4_图片显示
是最常用的文件图像格式,由一个软件开发联合会组织制定,同 BMP 格式不同,JPEG 是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料 会被丢失,因此容易造成图像数据的损伤(BMP 不会,但是 BMP 占用空间大)。但是 JPEG 压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获 得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得 到较好的图像品质。2. 位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。原创 2023-08-02 09:47:17 · 1544 阅读 · 0 评论 -
STM32F4_中英文显示
我们的点阵库只要按照这个编码规则从0x8140开始,逐一建立,每个区的点阵大小为每个汉字所用的字节数*190(每个区有190个汉字,190乘以每个汉字所占的字节数=该区总的字节数,也就是每个区的点阵大小)汉字在各种文件里面的存储不是以点阵数据的形式存储的(否则那占用的空间就太大了),而是以内码的形式(1个高8位,1个低8位)存储的,就是GB2312/GBK/BIG5等这几种的一种,每个汉字对应着一个内码,再知道这个内码之后再去字库里面查找这个汉字的点阵数据,然后在液晶上显示出来。原创 2023-10-22 19:35:55 · 458 阅读 · 0 评论 -
STM32F4_FATFS
就比方说我们自己的电脑上,我们的硬盘都是几百个G的容量,我们天天的往里存放各种各样的文件,有文档文件,有音乐文件,有视频文件。:在已知各文件首簇的前提下,从首簇开始,对于文件满一簇的数据,把整簇数据读出(按照扇区来读,一次性读出整个扇区),对于文件结尾不足一簇的部分,计算它占用簇内几个扇区,把占用整个扇区部分直接按照扇区读出,而最后很大可能是零散的若干个字节,不足一个扇区,也就是占用了最后一个文件的最后一个扇区的一部分(对于这部分来讲我们也要将整个扇区读出,截选中有效的数据部分),。原创 2023-10-22 19:35:03 · 562 阅读 · 0 评论 -
STM32F4_SD卡
要使用SD卡制造商特定的ACMD命令,需要在发送该命令之前发送CMD55命令,告知SD卡接下来的命令为特定应用命令,CMD55只对紧接着的第一个命令有效,SD卡如果检测到CMD55之后的命令为ACMD则执行特定应用命令,如果检测发现不是ACMD命令,则执行常规命令GEN_CMD;卡及接口控制单元的8个寄存器只能通过对应的命令去访问,SDIO定义了64个命令,每个命令都有特殊的意义,可以实现某一特定的功能,SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,从而实现SD卡的控制及读写操作;原创 2023-08-28 20:25:05 · 1375 阅读 · 0 评论 -
STM32F4_内存管理(Malloc、Free)
当指针p调用malloc函数动态申请内存的时候,先去判断指针p要分配的内存块数m,然后从末端开始查找,直到找到m块连续的空内存块,然后把这m块空的内存块的内存管理项设置为m,表示对应块的内存被占用,最后将这m块对应的内存块地址返回给指针p,完成一次分配。KEY2用于释放内存。我们在使用一块内存的时候,通常都不会恰到好处的使用完定义的内存,可能我们定义的内存不够我们使用,也可能我们定义的内存会多,这样会造成内存浪费;内存池被等分为n块,对应的内存管理表大小也为n,内存管理表的每一项对应内存池的一块内存。原创 2023-08-02 11:36:46 · 3302 阅读 · 0 评论 -
STM32F4_外部SRAM
因为数据宽度是16位的,所以一行可以存放2个字节,每次写入一个字节,那么就需要分别写入这16位的高8位和低8位,那么就需要借助I/O0-I/O7、I/O8-I/O15数据线分别写入这16位的高字节和低字节)因为SRAM读取数据是异步通讯,也就是没有时钟总线,也可以说是双方没有规定好时间,那么我将要读取的地址发送以后,就需要给出一定的反应时间(因为没有时钟,不是同步通信),也就是图中程序区域的。对于一般的应用来说,192K字节已经够用了,但是对于那些对内存要求比较高的,192K字节是远远不够用的;原创 2023-08-02 10:38:54 · 2561 阅读 · 0 评论