单片机
文章平均质量分 57
Mr1sky
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[STM32][F767]对cahe的个人理解
Cache:是一种高速、小容量的存储器,用于临时存储频繁访问的数据和指令,以加速访问。:STM32F7 系列微控制器配备了 L1 Cache,包括 ICache 和 DCache。配置:可以通过 HAL 库或直接操作寄存器来使能、禁用、刷新和清空 Cache。优点:提高性能和降低功耗。缺点:增加系统复杂性和数据一致性问题.2 Cache 脏数据的概念脏数据:在 Cache 中,已经被修改但尚未写回到主内存中的数据。产生:通过写操作产生,根据写回策略决定何时写回主内存。管理。原创 2024-11-23 18:12:29 · 1025 阅读 · 0 评论 -
[STM32][F767]寄存器实现外部中断输入--控制GPIO点灯
1)本次实验只是实现功能,实际应用中需要对机械按键做消抖处理;1 查看原理图,确定按键对应的IO----GPIOH.3。2)GPIOH.3引脚映射到EXTI3中断线需要用到。实验目的:寄存器实现EXTI中断,控制LED亮灭;实验环境:参考上一篇【原创 2024-11-21 20:12:04 · 392 阅读 · 0 评论 -
[STM32][F767]寄存器控制GPIO点灯
下图可以看到开启GPIOB的时钟的寄存器相对于RCC基地址偏移量 0x30 ,也就说寄存器地址是(0x40023800+0x30);之前做的项目都是用HAL库或者厂家已经封装好的库,没有很底层的实现过相关功能。原理图上确定驱动LED的引脚,本人用的是LED1----->GPIOB-0引脚;下图可以看到,GPIOB是挂载AHBI总线上的;可以参考RCC确定相应寄存器地址(基地址+偏移);上图可以看到,RCC寄存器基地址0x40023800;主函数调用gpio_ini就可以观察到实验现象!原创 2024-11-21 13:48:36 · 323 阅读 · 0 评论 -
GCC编译器,链接器对定义在头文件里面的内联函数报未定义错误
第一次遇到这种编译问题,当作笔记记录下来,也给遇到同样问题的同学参考下!现象:链接器对定义在头文件里面的内联函数报未定义错误;2)在inline 关键字前面加上static关键字。1)将编译等级调整到(o2)原创 2024-11-01 14:32:53 · 279 阅读 · 0 评论 -
[STM32][F767]使用DWT模块实现精确延时
在做项目的时候,驱动有时会用到us级别的延时比如软件模拟i2c、DS18B20驱动等 ,使用定时器可以实现,但是需要频繁进入中断,在RTOS环境下会影响实时性。ARM M3内核及更高级内核都会自带一个DWT模块,具体有作用可自行问度娘!在网上找到有人提到这个问题,缺少解锁 dbg regs(DWT->LAR = 0xC5ACCE55)(a.先使能DWT外设,由内核调试寄存器DEM_CR的位24控制,写1使能。c.使能CYCCNT寄存器,由DWT_CTRL的位0控制,写1使能。),试一下果然解决了;原创 2024-10-28 11:35:52 · 588 阅读 · 0 评论 -
【stm32】【KEIL】【单片机】【C++ 】 嵌入式开发事半功倍
(废)话多不表,开整!.cpp(c++源文件)和.hpp(c++头文件)只做和C++有关的,.c(c源文件)和.h(c头文件)只做和C有关的。.h文件:最不可思议的就是这个头文件了,所做的事就是把用c++写的对外函数的接口用extern“引用”,如果其他.c文件中的函数要调用c++写的接口,只需要包含这个头文件就可以了。.hpp文件:类的声明,c语言头文件的引用(要加extern "C",看图)以及用c++写的对外函数的接口的声明(要加extern "C",看图)不管不管就不管,我就要用c++开发!原创 2024-06-18 13:05:35 · 1044 阅读 · 0 评论 -
将关键代码和数据段定位到特定DTCM-RAM/ITCM-RAM中【STM32F767】
首先查看用到的XXX-RAM的映射地址,其中主SRAM映射的起始地址从0x20020000开始,大小368kb,TCM-RAM起始地址0x20000000,ITCM-RAM起始地址0x00000000。具体能带来多大的优势,没有查询,但是不经过其他协议直接与CPU交流,效果应该非常好!目的:将关键数据重定位到DTCM-RAM,关键代码段重定位到ITCM-RAM中,SRAM1作为主SRAM。说明:散列文件的语法以及AC6和AC5区别自行查资料(推荐硬汉论坛,如有哪里不正确的地方,有问题可以留言交流!原创 2024-06-15 23:33:42 · 1332 阅读 · 0 评论 -
史上最简单的bootloader【STM32F767】[【二】
2)没什么大用处,主要是学习---->看资料说是代码在sram中运行会快一点,本人没有测试过。那些不明白的地方,如果哪天搞明白了,会在文中更新,同时也希望有知道的大佬能留言指导下小弟!学习过程有点曲折,虽然实验现象符合预期,还是有很多不明白的地方,话多不表,开始!任务:bootloader不变,app自我复制,将app搬运到sram中运行。至此,通过app的自我复制,将代码搬运到sram中运行功能就实现了!启动文件改动的地方比较多,里面有很多不太明白的地方!散列文件改动了一点,一个一个说明!原创 2024-06-15 14:19:55 · 655 阅读 · 0 评论 -
史上最简单的bootloader【STM32F767】
首先就是外部SystemInit()(C语言实现,关于stm32内部环境初始化等等),然后再跳到__main(),__main()是运行环境(keil自带的)的初始化,然后再跳到main()(自己实现)执行。1)单片机上电开始,并不是从main()函数直接运行,而是从单片机的内核开始,经过一些初始化再跳到main()运行。1)因为不需要初始化外设,启动文件去掉了系统初始化和mdk初始化的代码,直接跳到app的入口地址,也就是mymain()4)boot工程main()函数的实现。2)app的散列文件。原创 2024-06-11 17:38:09 · 607 阅读 · 1 评论 -
STM32 TIM定时器 输出比较模式遇到的坑
按照网上的教程也能实现PWM波的输出,占空比和频率都符合预期。但是当波形时间拉长以后,就会出现ARR周期的高电平或者低电平,定位了好久。图中红框CCR的值超过ARR的值了,目前用注释掉的代码测试,现象是没了,但是长时间运行会不会有问题不确定。出现问题的原因很简单:比较寄存器超出ARR设定的值了;这两天在学习STM32 TIM定时器。此时ARR设定的值是6000。原创 2024-06-07 10:38:39 · 541 阅读 · 0 评论
分享