
STM32 进阶
文章平均质量分 60
定时器、DMA、ADC、SPI通讯、存储器和寄存器、FSMC、LCD
雁过留声花欲落
这个作者很懒,什么都没留下…
展开
-
STM32 进阶 定时器:1系统定时器 系统中断案例 LED闪烁
VAL进行减1然后触发中断,然后继续LOAD搬到VAL中进行-1触发中断。整个初始化逻辑在HAL_InitTick(TICK_INT_PRIORITY);首先systick定时器不够1s,所以只能自己建立一个外部的标志位,用来定时。TIM1和TIM8 高级控制定时器:输出能力更强,刹车控制、死区时间。系统定时器(SysTick系统)是属于CM3内核,内嵌在NVIC中。通过系统定时器的中断,每隔1s让LED1灯闪烁一次。内核中断没有明确中断标志位,所以没有清零操作。STK_CALIB 用来校准的(一般不用)原创 2024-12-02 17:24:51 · 417 阅读 · 0 评论 -
STM32 进阶 定时器 2基本定时器 基本定时器中断案例:LED闪烁
PSC预分频寄存器 自动重装载寄存器包含预加载寄存器和影子寄存器(工作时用的),整套机制叫预装载机制。,由于没有外部IO,所以只能计时,不能对外部脉冲进行计数。只有一种时钟源:内部时钟(不是RC电路),一般为72MHz。预分频器可以按1~65536之间的任意值分频。自动装载计数器,由各自的可编程预分频器驱动。UDIS:UEN使能,无法将值装入移位寄存器。这2个定时器是互相独立的,不共享任何资源。功能:没有外部引脚只能用来计时,计数器的时钟频率的算法。UIE:更新中断使能。SR寄存器:状态寄存器。原创 2024-12-02 20:54:16 · 383 阅读 · 0 评论 -
STM32进阶 定时器3 通用定时器 案例1:LED呼吸灯——PWM脉冲
PWM(Puls-width modulation)脉冲宽度调制,不停地修改高电平的宽度。输出占空比可调的PWM波形,作用到二极管,使二极管(LED2)呈现呼吸灯的效果。三个参数:周期、频率、占空比( 正脉冲的持续时间与脉冲总周期的比值。根据比较结果(> =原创 2024-12-03 21:15:32 · 793 阅读 · 0 评论 -
STM32 进阶 定时器3 通用定时器 案例2:测量PWM的频率/周期
产生中断会触发中断函数(这个函数将CNT计时器清零),但是触发中断函数之前会产生一个捕获比较事件,这个事件是将CNT的值搬到捕获比较1寄存器中。我们要设置占空比,因为我们是tim5产生的pwm方波,如果没有占空比,也就没有方波产生,也就产生不了上升沿触发不了中断。然后下一个上升沿会再次产生中断,那么会产生搬用事件将CNT计数器搬到寄存器中,可以抓取这个值,就是这个周期的事件。连接两个引脚,tim4和tim5的引脚,昨天tim5的引脚产生PWM方波,用tim4定时器用于测量。共四路,每路都有自己的输入引脚。原创 2024-12-04 19:43:18 · 1276 阅读 · 0 评论 -
STM32进阶 定时器4 高级定时器 + 高级定时器实验输出有限个周期的PWM波
使用高级定时器的重复计数器,当计数器溢出时,在溢出中断中停止定时器工作。重复计数器寄存器的值设置为4,即可输出5个周期的PWM波,发光二极管会闪烁5次。计数器每溢出1次,会产生一个信号,让重复计数器的值-1,直到重复计数器的值减到0,计数器再溢出,才会产生更新事件。输出5个周期的PWM波,频率2Hz,观察发光二极管闪烁5次,或者用示波器观察波形。死区时间:让两个通道不要同时是高电平,加了一个延迟,这延迟就是死区时间,可以配置。采用STM1,因为再原型图中,它连接时PA8,并且它连接LED3。原创 2024-12-07 10:52:43 · 382 阅读 · 0 评论 -
STM32进阶 DMA 直接存储访问
直接存储器存取(Direct Memory Access,DMA),提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。有些芯片没有DMA2。2个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求,还有一个仲裁器来协调各个DMA请求的优先权。DMA控制器和Cortex™-M3核心共享系统数据总线,执行直接存储器数据传输。原创 2024-12-07 10:54:49 · 628 阅读 · 0 评论 -
STM32 进阶 DMA实验1:RAM到外设(串口) 寄存器代码书写
使用寄存器实现把RAM中的数据直接传输到usart1的Tx引脚,然后数据被发送到电脑端。由于不同的通道对应着不同的外设,根据上表知道,我们应该选择DMA1的通道4。在Handware->创建DMA文件夹->创建dma.c和dma.h。在keil中魔法棒中添加dma.h文件目录。CMARx通道x存储器地址寄存器。CCAPx通道x外设地址寄存器。MINC:存储器地址增量模式。PINC:外设地址增量模式。CND通道x传输数量寄存器。CCRx通道x配置寄存器。PSIZE:外设数据宽度。可配8/16/32字节。原创 2024-12-07 13:46:25 · 303 阅读 · 0 评论 -
STM32进阶 DMA实验1:RAM到外设(串口)HAL库代码书写
System core系统的核心->DMA->add->选择USART_TX->Priority优先级->选择Very High。DMA Request Settings ->byte(还有word表示当前芯片的地址最大宽度)HAL_UART_Transmit_DMA(句柄,发送数组的地址,数组大小)。点击GENERATE CODE。直接在main.c文件。主函数内写如两行代码。原创 2024-12-07 14:42:18 · 169 阅读 · 0 评论 -
STM32进阶 ADC数模转换
类似于天平称重简化工程(也类似与二分查找):先调准天平,然后放入被测物体,再放最大砝码,依次减小砝码。计算机的世界里只有0和1,ADC转换器就是把模拟的物理量(电压值)转换为计算机认识的数字量。工作速度最快,随着精度提升,需要增加比较器,比较器很贵,成本程指数级上升。通常,ADC需要一个已知的电压作为参考,以便将模拟电压映射到数字代码。一般传感器会把观测的物理量转换为电压值,也就是所谓的模拟信号。采样后的模拟信号通过量化器,将其转换为相应的数字形式。采样率越高,ADC能够捕获更高频率的信号。原创 2024-12-09 14:06:20 · 616 阅读 · 0 评论 -
STM32进阶 ADC案例1独立模式单通道采集 寄存器代码
首先创建文件handware->创建adc.c 和adc.h两个文件,然后keil中配置包含目录。基于寄存器操作,采集可变电阻器的电压,并通过串口把电压数据发送到电脑端。原创 2024-12-09 17:09:04 · 143 阅读 · 0 评论 -
STM32 进阶SPI案例1:软件模拟SPI读写FLASH
基于寄存器操作,使用软件模拟SPI协议,完成读写FLASH。原创 2024-12-11 18:43:53 · 897 阅读 · 0 评论 -
STM32 进阶 SPI外设读写Flash 寄存器代码书写
STM32 的 SPI 外设可用作通讯的主机及从机,支持最高的 SCK 时钟频率为 fpclk/2 (STM32F103 型号的芯片默认fpclk1为36MHz,fpclk2为72MHz。),完全支持 SPI 协议的 4 种模式,数据帧长度可设置为 8 位或 16 位,可设置数据 MSB 先行或 LSB 先行。禁用NSS,用GPIO引脚配置通用推挽,让其和SPI相连,用其进行控制SPI。基于寄存器操作,使用SPI功能,完成Flash的读写。SPI_CR1:spi控制寄存器。SSI:内部从设备选择。原创 2024-12-11 18:50:03 · 1130 阅读 · 0 评论 -
STM32 进阶 ADC案例2:独立模式多通道采集 寄存器代码
PC0是10通道,采集的是可变电阻器的电压。PC1对应的是11通道,使用杜邦线连接到电源或地,测试他们的电压。当多个通道同时采集时,一般就需要使用DMA来传输数据,否则数据如果来不及取出,则会导致数据被覆盖。基于寄存器操作,用一个ADC同时采集多个通道模拟电压。原创 2024-12-12 15:28:02 · 314 阅读 · 0 评论 -
STM32进阶 存储器
存储器是计算机结构的重要组成部分。存储器是用来存储程序代码和数据的部件,有了存储器计算机才具有记忆功能。原创 2024-12-13 20:09:37 · 2952 阅读 · 0 评论 -
STM32 进阶 存储器映射
0x0000 0000-0x0007 FFFF:取决于BOOT引脚,为 FLASH还是系统存储器还是SRAM 的别名。0x1FFF F800-0x1FFF F80F:可选字节,用于配置读写保护、BOR级别、软件/硬件看门狗以及器件处于待机或停止模式下的复位。0x1FFF F000-0x1FFF F7FF:系统存储器,里面存放的是 ST 出厂时烧写好的ISP自举程序,用户无法改动。存储器映射并不是只针对SROM和片内Flash做地址映射,其实所有的片内外设(比如IO口)都需要地址,也都需要做映射。原创 2024-12-13 21:44:28 · 844 阅读 · 0 评论 -
STM32进阶 FSMC应用案例:扩展外部 SRAM
STM32F1 系列的芯片不支持扩展SDRAM(STM32F429 系列支持),它仅支持使用 FSMC 外设扩展 SRAM。由于引脚数量的限制,只有 STM32F103ZE 或以上型号的芯片才可以扩展外部 SRAM。使用FSMC扩展外部SRAM。然后把内存数据存储到外部SRAM中。原创 2024-12-14 11:33:22 · 444 阅读 · 0 评论 -
STM32进阶 FSMC应用案例:扩展外部 SRAM hal库代码
主函数里。原创 2024-12-14 11:46:20 · 144 阅读 · 0 评论