自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 stm32专题二十九:Flash 读写保护

写保护的配置一般以 4K 字节为单位,除 WRP3 的最后一位比较特殊外,每个WRP 选项字节的一位用于控制 4K 字节的写访问权限, 把对应 WRP 的位置 0 即可把它匹配的空间加入写保护。被设置成写保护后,主 FLASH 中的内容使用任何方式都不能被擦除和写入,写保护不会影响读访问权限,读访问权限完全由前面介绍的读保护设置限制。解除写保护是逆过程,把对应 WRP 的位置 1 即可把它匹配的空间解除写保护。解除写保护后,主 FLASH 中的内容不会像解读保护那样丢失,它会被原样保留。

2023-12-19 20:34:05 639

原创 stm32专题二十八:读写内部Flash

为了防止应用程序被抄袭,有的应用会禁止读写内部FLASH中的内容,或者在第一次运行时计算加密信息并记录到某些区域,然后删除自身的部分加密代码,这些应用都涉及到内部FLASH的操作。除了使用外部的工具(如下载器)读写内部FLASH外,STM32芯片在运行的时候,也能对自身的内部FLASH进行读写,因此,若内部FLASH存储了应用程序后还有剩余的空间,我们可以把它像外部SPI-FLASH那样利用起来,存储一些程序运行时产生的需要掉电保存的数据。操作内部Flash的库函数。实验:读写内部Flash。

2023-12-18 15:00:28 1159

原创 stm32专题三十二:RTC实时时钟

在高或低寄存器(RTC_CNTH或RTC_CNTL)上的写操作,能够直接装载到相应的可编程计数器,并且重新装载RTC预分频器。RTC_PRL写入一个计数器目标值,计几个数溢出一次,就是几分频,因为从0开始计数,所以分频系数等于RTC_PRL+1。在c语言中,gmtime函数返回的时间日期未经时区转换,而是UTC时间(格林尼治时间),localtime(取得当地目前UTC时间和日期) ,此函数返回的时间日期已经转换成当地时区。但是在STM32中,不知道位于哪个时区,所以返回的都是格林尼治时间(0时区)。

2023-12-18 10:11:12 1043

原创 stm32专题三十一:电源管理实现低功耗

停止模式下,HSE和HSI被关闭,调压器可选开启或低功耗模式(若选为低功耗模式,则还需要加上调压器从低功耗切换至正常模式下的时间),外部中断唤醒内核。上电复位后 STM32处于运行状态时,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗,这三种模式中,电源消耗不同、唤醒时间不同、唤醒源不同,用户需要根据应用需求,选择最佳的低功耗模式。睡眠模式下,任何中断都可以唤醒内核,外部 / 内部高速时钟保持打开,调压器保持打开,因此,内核只要被唤醒,就能马上正常的执行程序(优点:响应速度快;

2023-12-13 20:50:54 1119

原创 stm32专题三十四:看门狗

独立看门狗简介IWDG结构框图(1)独立看门狗时钟独立看门狗的时钟由独立的 RC 振荡器 LSI 提供, 即使主时钟发生故障它仍然有效,非常独立。LSI 的频率一般在 30~60KHZ 之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度要求比较低的场合。(2)计数器时钟,其中PRV就是IWDG_PR的值。(3)计数器(4)重装载寄存器。

2023-12-13 19:02:00 549 1

原创 stm32专题二十六:测量PWM 频率 + 占空比

计数周期不能设置的太小,如果我们设置的计数周期 < PWM周期,那么就无法捕获PWM脉冲,一般驱动电机的PWM是10k ~ 25kHz,当设置的周期为1ms,对应频率为1kHz,那么就可以捕获1kHz以上的PWM 信号;从模式呢,就是接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制,所以叫从模式触发源选择,就是选择从模式的触发信号源的,你可以认为它是从模式的一部分。触发源选择,选择指定的一个信号。从模式可以在这个列表里。// 选择输入捕获的触发信号 选择从模式触发源。

2023-12-10 20:38:10 740

原创 stm32专题二十六:输入捕获 脉宽测量

如果按键按下,则PA0产生上升沿,我们进行脉宽测量时,首先设置为上升沿捕获,然后在第一次捕获到上升沿时,将计数器清零,并设置捕获极性为下降沿捕获。值得注意的是,如果定时器溢出频率为72M(预分频系数71)时,最大计数值为65536us,要考虑溢出(更新中断)。具体的由寄存器 CCMRx 的位 ICxPSC配置,如果希望捕获信号的每一个边沿,则不分频。因为这里选择PA0,对应定时器通道为CH1,当更换引脚时,需要配置为相应的通道。(4) 编写中断服务函数,读取捕获值, 计算出脉宽的时间。

2023-12-08 21:24:27 805

原创 stm32专题二十六:互补输出 死区刹车

这一部分代码,主要是初始化3个结构体,包括时基结构体、输出比较结构体和死区配置结构体,高级定时器初始化结构体详解。

2023-12-08 19:28:15 705

原创 stm32专题二十六:高级定时器介绍

当计数器 CNT 的值跟比较寄存器 CCR 的值相等的时候,输出参考信号 OCxREF 的信号的极性就会改变,其中 OCxREF=1(高电平)称之为有效电平,OCxREF=0(低电平)称之为无效电平,并且会产生比较中断 CCxI,相应的标志位 CCxIF(SR 寄存器中)会置位。说实在的,这个地方参考手册里就没有个明确的表述,让人很费解。在看高电平的时间,CNT从0一直加到CCR,比如CCR是30,注意在等于30的瞬间,就已经跳变为低电平了,所以CNT从0到29是高电平,总共为30个数的时间。

2023-12-08 19:00:31 1168

原创 stm32专题二十五:实现基本定时器定时

2 定义时基初始化结构体,然后只需要配置分频系数PSC和重装载计数值ARR,其他结构体成员不用管;3 开启定时器中断,这里要选择为定时器更新中断;1 开启基本定时器的时钟;

2023-12-07 19:51:59 361

原创 stm32专题二十五:基本定时器原理

计数器16bit,只能向上计数,只有TIM6和TIM7;没有外部的GPIO,是内部资源,只能用来定时;时钟来自PCLK1,为72M,可实现1~65536分频;1 时钟源(72M):时基单元定时器最主要的就是时基部分:包括 预分频器、计数器、自动重装载寄存器。PSC预分频器写0,1分频,写1,2分频。所以预分频器的值和实际的分频系数相差1,即分频系数=预分频器的值+1。

2023-12-07 19:42:57 1001

原创 stm32专题二十四:ADC + DMA 多通道 规则同步

选用ADC1和ADC2,ADC1有一个通道PC1,ADC2有一个通道PC4。其中,ADC1设置为软件触发,而ADC2其实是由ADC1的触发信号一起触发的,根据中文参考手册,要设置为外部触发。由于ADC2需要在ADC1的规则组多路开关的外部触发下同步执行转换,因此它被配置为在外部触发到来时启动转换,以实现同步。由于两个ADC为同步规则触发,要想达到同步,将。ADC + DMA多通道采集。通道的外部触发模式,

2023-12-05 14:51:28 528

转载 stm32专题二十四:ADC独立模式单通道采集

当要传输大量的数据时,一般都是采用DMA。ADC + DMA本身的配置非常简单,就只需要注意,只能使用ADC1或ADC3,而ADC2无DMA传输功能。配置ADC时钟,配置通道的转换顺序和采样时间;使能ADC转换完成中断,配置中断优先级;编写main函数,把转换的数据打印出来;编写中断服务函数,读取ADC转换数据;实验一:独立单通道中断读取ADC值。软件触发ADC,真正开始转换;初始化ADC用到的GPIO;实验二:独立单通道DMA读取。初始化ADC初始化结构体;使能ADC,准备开始转换;

2023-12-05 13:14:39 108

转载 stm32专题二十四:ADC简介

当需要两个注入通道呢,JL = 1,转换顺序(4 - JL)= 3,此时要转换的两个通道顺序为JSQ3、JSQ4。注入,可以理解为插入,插队的意思,是一种不安分的通道。如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。一切准备就绪后, ADC 转换后的数据根据转换组的不同,规则组的数据放在ADC_DR 寄存器,注入组的数据放在 JDRx。外部的16 个通道在转换的时候又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多有4 路。

2023-12-04 14:09:59 328

原创 stm32专题二十:扩展SRAM

这里以IS62WV51216BLL为例:芯片引脚图如下(40引脚来驱动):结构框图如下:引脚说明(要注意UB和LB,也就是高字节和低字节):

2023-12-02 20:22:41 455

转载 液晶显示中英文程序

这个显示字符串的函数,其实是封装了上一个显示单个字符的函数。其中 usX 和 usY 用于设定字符的显示位置,usChar 是字符的编码,这是一个 16 位的变量,因为 GB2312编码中每个字符是 2 个字节的。因为我们制作的字模从空格“ ”开始,所以要先求字符相对于空格的偏移,然后 偏移 * 字符大小 求得数组元素偏移,然后将指针指向 待显示字符 的起始位置,此时已经找到了字模数据。这个函数,跟之前的显示英文字符串的函数一样,唯一的区别就是,这个函数一次读取两个字节(GB2312编码)。

2023-12-02 19:17:49 35

转载 液晶显示中英文 字符编码

可以看到,UTF-32编码,对于使用英语地区的国家,实际上是非常不友好的,原来使用单字节能表示的字符,为了兼容Unicode,现在要使用4个字节存储,增加了3倍的存储空间。联想到之前液晶显示的程序,液晶显示的原理就是开窗,然后不断的填入16位颜色数据(RGB565格式),如果按照串口输出的做法,在字模数据为为 1 处显示白色,为 0 处显示黑色,就可以打印字模对应的文字(黑底白字)。第 0 个字节存储的是空格,根据区号和位号,求出字符相对于空格的偏移,然后*字符大小,就能求出数组下标索引。

2023-12-02 14:25:18 194

原创 AT24C02 E2PROM芯片详解

E2PROM支持连续写操作,操作和单个字节类似,先发送设备写操作地址(DEVICE ADDRESS),然后发送内存起始地址(WORD ADDRESS),MCU会回应一个应答信号(ACK)后,E2PROM会继续传输下一个地址的数据,MCU不断回应应答信号可以不断读取内存的数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。应答信号:主机SCL拉高,读取从机SDA的电平,为低电平表示产生应答。在了解了IIC的基础知识之后。

2023-11-23 10:57:12 1401

转载 STM32 DMA配置

DMA的基本介绍什么是DMA (DMA的基本定义)DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,

2023-11-19 19:14:04 158

转载 STM32 串口通信

USART简介1. 串口通信串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式,如SPI通信、USART通信、EEPROM通信等。简单讲,串口通信实现了上位机(PC)与下位机(如STM32)之间的信息交互。上位机(PC)通过串口调试助手等实现数据的接收和发送;下位机(STM32)通过printf()、getchar()等函数实现字符或字符串的接收和发送。

2023-11-16 14:08:07 59

原创 STM32外部中断

当同时有两个及以上的中断时,就必须设置中断优先级了,在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx, 用来配置外部中断的优先级,其宽度为 8bit,每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。

2023-11-11 21:03:17 100 1

原创 51单片机 DS1302可调时钟

DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能 RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟芯片。

2023-10-09 14:27:12 187 1

原创 BCD码、十进制互相转换

记录今天用15单片机写时钟芯片程序的时候遇到的问题时间显示是这个样的 0 1 2 3 4 5 6 7 8 9 169之后突变成16了,没有数据10...11...why?DS1302时钟芯片的数据是,需要将转换成十进制显示数据的时候需要十进制转BCD码。

2023-10-08 19:35:30 674 1

转载 74HC573锁存器

都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D)输入而变。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,3,74hc573-1是控制段选的,74hc573-2是控制位选的,P2.6和P2.7端口是锁存使能位,置高电平时锁存器透明(即输入和输出相同),置低电平时锁存。1,共阴数码管的每一位(WEI1,WEI2,WEI3…)都是公共的阴极,只有输入低电平的时候才有可能被点亮,所以位选的时候被选中的位必须是低电平。当输入的数据消失时,在芯片的输出端,数据仍然保持;

2023-10-05 10:47:52 296

原创 单片机定时器0,TH0和TL0初值的计算

则每秒可产生机器周期为11.0592/12=0.9216M的机器周期,也就是921600个机器周期。12M晶振每秒可产生1M个机器周期,1M个机器周期就是1000000个机器周期。一个机器周期为1us, 50ms就需要50000个机器周期,定时器在方式1工作,为16位,最大值为65536,所以需设初值为65536-50000=15536;15536/256得到高八位,因为高八位都是256的倍数,15536%256得到低八位,因为低八位最大为128,所以对256取余。公式为:机器周期=晶振频率/12。

2023-10-05 10:02:19 4653

原创 时钟周期,机器周期,指令周期

这里我们以51单片机为例,它有固定的机器周期,一个机器周期包含六个状态例如,取指令、存储器读、存储器写等。即机器周期等于6个状态周期,而一个状态周期是2个时钟周期,因此一个机器周期又等于12个时钟周期。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。时钟周期,又称为震荡周期,是为单片机提供定时信号的震荡源的周期,是单片机最基本的时间单位。通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。

2023-09-27 10:05:00 1066 1

原创 中断查询次序号就是中断号

interrupt 后面的点是中断号。关键字是不可缺少的,由它告诉编译器该函数是中断服务函数,并由后面的n 指明所使用的中断号。interrupt 0等不是c语言标准里面的东西,而是Keil C51针对8051体系自己定义的关键字,当发生中断时,会跳转到这个函数里面。中断函数类型void,说明中断函数是不能有返回值的,这点要明确,所以不要企图让中断函数给你个返回值。还有,函数名后面括弧内是没有参数的。这点也需要注意,中断函数不能传递参数。

2023-09-26 20:40:47 112

原创 C语言基本数据类型及其范围

需要注意有符号和无符号时的转换以char类型为例。

2023-08-27 14:02:17 287 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除