STM32F407学习
文章平均质量分 63
记录自己学习和复习的过程。
Steamed_Potato
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
FSMC - 可变静态存储控制器
存储器会用到许多IO口作为地址和数据线的接口,如果按一般方法则写入和读取数据要挨个配置或读取IO口,非常麻烦。STM32的某些MCU可以使用FSMC的功能,通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NANDFlash存储器的引脚直接相连,而写入和读取只消使用库函数。FSMC的本质是配置MCU和存储器之间的连接和读写关系,是一种配置器,而并不是什么外设。原创 2025-04-14 20:49:56 · 2261 阅读 · 0 评论 -
通用定时器输出PWM波
PWM模式1(CNT<CCR时输出有效电平),极性选择高(即有效电平)的情况下如图所示。小于CCR和大于等于CCR时分别输出一个极性的电平。CCR不能大于ARR,否则恒定输出有效电平。原创 2025-04-10 17:46:21 · 299 阅读 · 0 评论 -
串口发送指令
strchr()返回的是某个字符在字符串中第一次出现的位置。(注意,返回的是字符指针char*而不是序号)这里返回等号的位置,例如字符串"Freq=2000",该函数返回的equalSignIndex满足*equalSignIndex=='=',而它和其他字符指针一样,也可以表示一个字符串。第二个参数是char** endptr,表示最后一个匹配的字符位置(比如"Freq=2000Hz",函数只会匹配到最后一个0的位置并返回2000)很明显这里传入char**的作用是在子函数里改变endptr的值。原创 2025-04-10 17:57:33 · 380 阅读 · 0 评论 -
在运行过程中改变PWM波的占空比
发现在灯比较暗时改变频率(灯暗就是占空比比较大,CCR比较大;特别是频率由低变高的时候,即ARR减小),灯直接熄灭了。问ds,说原因可能是CCR<ARR导致一直输出有效电平。但是这里极性设置的是低,如果CCR太小灯应该一直亮才对,所以不清楚原因。试着在改变ARR寄存器的值后对CNT进行清零,发现似乎能解决这个问题(暂时没发现解决不了的情况),不知道原因。操作时遇到了非常困难的问题,故单独拿出来讨论。使用的是PWM模式1,极性为Low。(CNT<CCR时输出低电平,即灯亮)原创 2025-04-10 18:18:55 · 318 阅读 · 0 评论 -
模数转换ADC
F407集成3个12位ADC。若电压探测范围为0-3.3V,则分辨率为0.8056640625mV,实际范围是0-3.2991943359375V。F407还可以选择10、8、6位精度。原创 2025-04-11 10:51:34 · 2393 阅读 · 0 评论 -
独立看门狗(IWDG)和窗口看门狗(WWDG)
所谓看门狗就是让程序每隔一段时间刷新一次计数器,如果计数到0还没有刷新,则程序可能在某个位置卡死了,此时看门狗会发出一个复位信号或中断(仅WWDG)。原创 2025-03-29 10:56:53 · 989 阅读 · 1 评论 -
RTC实时时钟
实时时钟就是独立于MCU电源运行的时钟,断电后使用自己的电池,时间会继续走。原创 2025-03-28 22:12:32 · 371 阅读 · 0 评论 -
硬件I2C读写EEPROM
第一个参数是I2C句柄结构体,第二个参数是要写入的外设地址(看各个外设的手册,对于这里的EEPROM来说是8位地址0xA0。第八位置0是写入,置1是读出,但是硬件I2C可以忽略,用读函数则最后一位置为1,所以只用7位地址),第三个是在设备里写入数据的起始地址,第四个是地址的位数(7位或10位),第五个是写入数据的指针,第六个是写入数据的字节数,第七个是超时时间。在写了之后下面有3个while,GetState是判断I2C总线是否空闲,而IsDeviceReady是从设备是否准备好接受数据写入。原创 2025-03-28 21:48:37 · 303 阅读 · 0 评论 -
SysTick定时器
SysTick本质上是一个递减的定时器,其时钟可以来自内部或外部。以实验使用的开发板为例,通常使用外部25MHz石英晶振输入,通过内部锁相环倍频到168MHz给APB总线使用。在CubeMX里面设定AHB总线的HCLK为168MHz后,软件就自动配置SysTick时钟频率也为168MHz,如图。这样配置之后,每经过(1/168M)s(也就是1/168us),SysTick计数器的计数值就会减1,并且产生一个SysTick中断。原创 2025-03-28 15:25:13 · 881 阅读 · 0 评论 -
中断小补充
以前学f103标准库的时候,直接写中断服务函数IRQ_Handler,在里面要完成中断标志位判断、中断标志位清零和具体的中断操作。现在用f407,f4xx_it.c里已经写好了这些操作,用户只用重载回调函数,显然更方便了。比如定时器,以前首先要检测是累加溢出还是比较溢出的标志位置位,然后将对应标志位清零,再进行相应的操作(比如输出PWM波)。印象里,学avr的时候还要在中断服务函数里将中断失能,完成操作后再使能。原创 2025-03-24 21:11:17 · 115 阅读 · 0 评论 -
UART串口通信
重点记录一下接收的过程。Test是一个数组uint8_t Test[30],内容是"The serial port is working."。原创 2025-03-24 20:47:22 · 1753 阅读 · 0 评论
分享