
STM32
文章平均质量分 69
sakabu
记录我的嵌入式学习路线,梦想成为嵌入式大牛
展开
-
TIM(定时中断&外部时钟)(STM32学习笔记)
关于外部时钟模式1和2,我还没搞懂区别,如果你想在ETR外部引脚提供时钟,或者想对ETR时钟进行计数,把这个定时器当做。·不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接 口、主从触发模式等多种功能。TIM _ETRClockMode1Config,选择ETR通过外部时钟模式1输入的时钟。TIM _ETRClockMode2Config,选择ETR通过外部时钟模式2输入的时钟。TIM_ITRxExternalClockConfig,选择ITRx其他定时器的时钟。原创 2024-01-17 15:26:38 · 2668 阅读 · 8 评论 -
IWDG&WWDG(STM32学习笔记)
这里与独立看门狗不懂,独立看门狗在超时时间之前喂狗就不会引起复位;窗口看门狗要在窗口时间和超时时间之间喂狗,由PCLK1作为时钟源,需要调用RCC库函数开启,并且进来后会有一个4096的分频,图中没标出来。模板代码配置了窗口时间30ms,超时时间50ms的窗口看门狗,所以在喂第一次狗后(代码最后一行),30ms之后、50ms之前要喂狗,否则会引起复位。看门狗能在停机和待机模式下工作,从上节我们能得知,IWDG复位也能唤醒待机模式下的主机。只要在超时时间之内完成喂狗,独立看门狗就不会复位。原创 2024-02-10 22:42:38 · 371 阅读 · 3 评论 -
PWR(低功耗模式)(STM32学习笔记)
进入待机模式后,只能由特定的方式唤醒STM32:如设定RTC闹钟,使用RTC_SetAlarm();只需要一句代码,程序在执行到这句后立刻进入睡眠模式,只要有任一中断信号产生,就会停止睡眠,并从暂停的地方开始执行下一步代码。进入停止模式,里面有两个参数选择,第一个选择电压调节器是打开还是处于低功耗模式,低功耗模式下唤醒会有一定的延时;唤醒条件表中也给出了,WFI表示中断唤醒,WFE表示事件唤醒(本节采用中断唤醒)。本节学习如何使用PWR的低功耗模式来降低STM32的功耗,以及各种模式对应的使用条件。原创 2024-02-09 00:59:10 · 575 阅读 · 1 评论 -
BKP&RTC(STM32学习笔记)
我们先使能LSE外部低速时钟,然后选择LSE作为RTC的时钟源,再配置RTC各个参数就可以了,本节不使用闹钟和中断的功能。本节使用的STM32F103C8T6是中容量单片机,所以只能存储20字节的数据,共有10个DR数据寄存器,每个寄存器能存储两个字节的数据。可以对秒计数器进行读写操作,想要将秒计数器里的值转换成想要的年月日时分秒,需要用到<time.h>库里的函数。我们一般选择LSE作为RTC的时钟源,再经过分频器输出1Hz的信号给RTC的秒计数器。注意事项里的第二点和第四点,用两个无参的函数就能完成。原创 2024-02-07 03:02:00 · 823 阅读 · 1 评论 -
SPI(STM32学习笔记)
见上图,主机想要给从机发送0xAA,交换一个字节后,主机接收到的是0x55,从机则接收到0xAA,我们如果只想接收数据,就随便发送一个数据给从机;SCK默认低电平,当SS第一个下降沿的时候,MOSI和MISO移出数据,在SCK的上升沿移入数据,如此循环八次,便交换一个字节,所以SPI通信其实就是交换数据。配置SPI结构体一般都是按照上面的参数来配置,SPI不同的模式差别也就在于时钟的相位,是第几个边沿采样的区别,本质上没有区别,这里配置成模式0;MISO是输入端,所以配置为普通的上拉输入;原创 2024-02-03 17:44:13 · 1321 阅读 · 3 评论 -
I2C(STM32学习笔记)
虽然是输出,但仍然可以输入,应为这里默认高电平是一种弱上拉,从机要发送数据只需要进行拉低电平或释放这一种操作,“拉”或“不拉”,主机读取电平就能接收从机发送的数据。附:在主发送和主接收的序列图中,发送从机地址后,我们会判断EV6事件,可以看到后面还接了一个EV8_1事件,这个事件是提醒我们该写入数据发送出去了,因此我们不需要判断EV8_1事件。指定地址读的前三步和指定地址写一样,起始条件后发送从机地址,写寄存器地址,然后重复起始条件,发送从机地址选择“读”,这里判断EV6事件就不同于指定地址写。原创 2024-01-31 18:16:23 · 2114 阅读 · 0 评论 -
USART(串口协议&通信)(STM32学习笔记)
数据,首先开启RXNE到中断的通道,用USART_ITConfig函数,再配置NVIC优先级分组等参数;见手册描述,我们对DR进行读操作,硬件会将标志位清零,所以这里不需要我们像收数据一样手动清除标志位。为1时标志可以继续发了,和RXNE对应,为1时表示接收到了数据,可以读了,以免继续发数据被覆盖了。本节展示串口收发的功能,通常使用波特率为9600,8位数据位,即无校验位,停止位长度为1的时序。有数据时会触发中断,中断函数从启动文件里找。原创 2024-01-26 03:41:19 · 1568 阅读 · 1 评论 -
DMA(STM32学习笔记)
上一节我们用的是ADC的非扫描模式,主要是因为,ADC多通道扫描时,会不断把数据运到ADC的DR寄存器,但又没有人将数据运出去,就会导致前面的数据被覆盖,所以DMA就派上用场了。,这里的外设只是个名字,只是为了区分,要怎么配置可以按照实际需要选择,我们要把数组A的元素传递给数组B,又把数组A的首地址放在了外设站点,所以选择外设地址为源地址。,DMA是从这里转运数据的,我们定义一个数组用来存放转换值,那么存储器地址(目的地址)就是数组名,函数,ADC就会硬件触发DMA,不需要我们手动检测标志位等操作。原创 2024-01-24 05:04:24 · 2000 阅读 · 1 评论 -
ADC(STM32学习笔记)
所以我们只需要在初始化函数最后触发一次就可以了,不需要一直在while里触发,读取转换值时也不用判断标志位,因为此时数据寄存器会不断刷新最新的转换结果,我们只需要读出来就行了。由手册可知,我们调用 ADC_GetConversionValue函数时,就是读取ADC_DR的值,所以不用再手动对EOC清零。由上图可知,ADCCLK最大频率为14MHz,所以这里选择6分频,即72MHz/6=12MHz。将该函数放在while循环里,就会不断进行软件触发,进而进行ADC转换,当转换完成时,EOC为1。原创 2024-01-22 11:25:43 · 403 阅读 · 0 评论 -
TIM(编码器接口)(STM32学习笔记)
可见之前的定时器内容,在配置时基单元之前,我们都需要选择时钟,内部时钟或者外部输入时钟等,但是我们这节内容不需要,直接初始化GPIO后配置时基单元,参考手册里有这样一句话:“编码器接口模式基本上相当于使用了一个带有方向选择的外部时钟”,因为编码器接口会托管时钟,可以理解为编码器接口就是一个。PSC选择不分频,ARR给最大值,当编码器反转、计数器自减小于0时,会从65535开始继续减小,但强制转换成int16_t类型时,会转换成从-1开始减小,这样就能用OLED屏幕显示出来。原创 2024-01-21 06:26:34 · 1059 阅读 · 1 评论 -
TIM(输入捕获)(STM32学习笔记)
输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用 于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。TIM_ICSelection配置的是通道连接选择,即直连还是交叉连接,交叉连接一般用于PWMI模式,即可以读出两个CCR的值,用于计算占空比。主要搞懂CNT的变化,明白每一段的CCR代表的是什么,通过主从触发模式实现硬件的自动清零,外部每来一个。输入捕获用于测量外部输入的波形,所以照常初始化GPIO和定时器内部时钟,上节课的代码我们利用了。原创 2024-01-20 09:03:29 · 1290 阅读 · 0 评论 -
TIM(输出比较&PWM波形)(STM32学习笔记)
(对于普通的开漏/推挽输出,引脚的控制权是来自于输出数据寄存器的,如果想让定时器控制引脚,就需要使用复用开漏/推挽输出,这时输出数据寄存器被断开,输出控制权转移给片上外设,这里片上外设的引脚连接的是TIM2的CH1通道)可见还是要用到定时器的功能,通过不断比较CCR和CNT的值,在PWM模式1下就能输出PWM波形,通过修改CCR的值,就能产生不同占空比的PWM波形。这里的ARR=99,PSC=719,CCR=50,那么根据公式可知,输出的是一个频率为1KHz,占空比为50%,分辨率为1%的PWM波形。原创 2024-01-19 21:24:10 · 2985 阅读 · 1 评论 -
EXTI(STM32学习笔记)
去启动文件里的startup_stm32f10x_md.s文件找到函数名为EXTIx_IRQHandler的中断函数x与选中的端口对应(STM32的10到15号端口是共用的一个中断函数 EXTI15_10_IRQHandler)·EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向 NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序。·支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断。原创 2024-01-15 21:34:15 · 444 阅读 · 2 评论 -
GPIO (STM32学习笔记)
GPIO_WriteBit前面两个参数选择引脚,第三个参数填写Bit_RESET或Bit_SET来设置电平。(7)GPIO_Mode_AF_OD 复用开漏输出(第二功能IO口)(8)GPIO_Mode_AF_PP 复用推挽输出(第二功能IO口)(2)GPIO_Mode_IN_FLOATING 浮空输入。(5)GPIO_Mode_Out_OD 开漏输出。(6)GPIO_Mode_Out_PP 推挽输出。(1)GPIO_Mode_AIN 模拟输入。(3)GPIO_Mode_IPD 下拉输入。原创 2024-01-14 06:29:10 · 473 阅读 · 2 评论