历史上的今天
返回首页

历史上的今天

今天是:2024年12月21日(星期六)

2021年12月21日 | STM32学习记录(1)

2021-12-21 来源:eefocus

1.同时控制同个端口的多个LED,在初始化的时候,使用或运算符"|",就不用再cv一份代码进行初始化了。


2.LED,发光二极管

二极管:压降,经过自己的时侯电压会自动降低额定的伏数,0.3V或0.7v,

电流不能大于10mA,

限流电阻最小值=( 3300-300)/10 = 300欧姆。


3.引脚悬空

答:那么电阻约等于无限大,且静电积累会造成影响,导致引脚损坏。


4.按键设计的时候,为什么要加一个上拉电阻呢?而且电阻阻值设置为10K?

答:给单片机输入一个确定的电平,不加上拉电阻,单片机的输入电压没有一个参考对象,无法准确地判断为高电平还是低电平。接地,地为参考对象,则为低电平,接VCC,有个上拉电阻,上拉电阻为参考对象,为高电平。同时,也增加了抗干扰能力。


5.推挽输出作用

答:提高驱动电流。


6.上拉电阻设置为多大合适呢?

答:其实330/470/510/1K/2K /3K3/4KT/10K都是没有问题的。

但是电阻值越小,其功耗会增加,例如330欧,通过的电流则是10mA,如果是电池进行供电,那么其损耗就太大了,影响续航能力。但是电阻也不是越大越好,否则识别不了电流,所以选择一个折衷的方案,也可以说是一个经验值。

设置为10K,3.3V/10K=0.33mA。

弱上拉用10K,强一些用4.7K的。

5V一般用10K,3.3用4.7多一点。


总结:上拉电阻的选择,上拉电阻选择越大,功耗越低,但是要保证通过的电流能驱动外设和IO口,上拉电阻选择越小,功耗越大,但是要保证当为低电平时,io口端的电压要在低电平的电压值的范围之内, 经验值为4.7k到10k之间。


7.TTL识别电平如下图所示

在这里插入图片描述

8.芯片外部晶振大小

32.768KHz:看时钟树的框图可知,是提供给芯片内部RTC时钟的,32768刚好被256和128分频,得到1HZ,2的15次幂,即1S的定时。

8MHz:连接到芯片内部的锁相环回路,进行倍频,提供给CPU。


需要注意使得是:挂载在不同总线的最高频率是不一样的,例如STM32F407,CPU最高168MHz。

APB1,高性能外围设备总线1,最高42Mhz;

APB2,高性能外围设备总线2,最高84Mhz;

中间有个分频器,用来降低频率,具体数值从时钟树进行查看。


9.如何查看外设挂载在哪条总线上面

答:具体从stm32f4xx_rcc.h头文件进行查看外设是哪条总线的。


10.MCO1和MCO2是什么?

答:控制时钟输出,即也可以提供给外部输出时钟。


11.main函数之前,还有其他函数需要先运行吗?

答:系统初始化函数,在启动文件中可以看到,SystemInit。

里面主要是配置PLL,有个SetSysClock()函数。


12.关于配置PLL

答:在数据手册的RCC——PLL内容,有计算公式,使用外部时钟的时候,如果使用外部晶振,那么要注意好参数因子M/N/P/Q的取值,例如在STM32F407的头文件stm32f4xx.h中,所设置的HSE为25M,而开发板提供的一般是8M,此时就要进行修改了,ctrl+f查找到25000000的,修改为8000000,想要输出想要的数值具体得看参数因子的设置 是否正确,只要涉及到倍频,就会有计算公式。


分割线

继续

13.volatile关键字

volatile关键字分析,往往应用在三种场合

1)多线程编程共享全局变量的时候,该全局变量要加上volatile进行修饰,让编译器不要优化该变量

2)裸机编程的时候,某函数与中断服务函数共享全局变量的时候,该全局变量要加上volatile进行修饰,让编译器不要优化该变量。

3)ARM定义寄存器的时候,寄存器是指向一个地址,要加上volatile进行修饰,让编译器不要优化该变量。


编译器不要优化该变量也就是不对该资源进行保护,让任何程序随时都可以对它修改。


例如,我们在全局变量定义了一个变量a,在main函数中赋值为10,a=10;

又在一个中断服务函数中,设置a=11;那么当执行完中断服务后,a的值还是没有改变,

因为默认对a进行了资源保护,要想在中断服务函数修改a变量的值,必须在声明a变量的时候在前面加上关键字volatile,让变量a可读可写,可以被修改。


14.STM32任何一个GPIO引脚都能够实现外部中断,但是例如如下图所示,PA0~PI0只能选择一个,STM32总共有16条GPIO外部中断线,即可以设置16个GPIO外部中断。所以在初始化GPIO外部中断的时候,还需要配置外部中断线,

EXTI_InitTypeDef EXTI_InitStructure。

在这里插入图片描述

部分图示如下,其中中断优先级分组只设置一次,防止出现混乱的现象。

只要修改中断优先级分组,发现硬件的抢占优先级和响应优先级都是发生变化,导致中断管理紊乱。

在这里插入图片描述
在这里插入图片描述

中断服务函数一般写在stm32f4xx_it.c中,中断向量名称在启动文件中可以找到

在这里插入图片描述

最容易忘记的就是在去驱动开头开启系统时钟!!!

在这里插入图片描述

16.抢占优先级与响应优先级区别

1)高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。

2)抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。

3)抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。

4)无论是抢占优先级还是响应优先级,优先级数值越小,就代表优先级越高。


17.调整堆栈的大小

答:在启动文件里面设置,如果栈大小不足,会导致栈溢出,堆比较少使用。

0x4000 也就是16384字节,16384÷1024=16,即16KB, STM32的数据RAM通常是满足需求的。


18.值得一提是的,国外在写底层相关函数的时候,例如sFLASH_LowLevel_Init(void),采用lowlevel来描述。


19.程序下载没有反应,如何排除问题?

答:一看是不是程序关了sw和jtag,二看有没有识别到芯片,三看boot引脚,四看晶振。

推荐阅读

史海拾趣

全志(Allwinner)公司的发展小趣事

随着平板市场的逐渐饱和,全志科技开始寻求新的增长点。公司在保持原有产品线优势的同时,积极拓展多品类产品线,实施了营销端BU化,并提出了未来大方向的MANS战略。这一转型不仅增强了公司的市场竞争力,也为公司的长期发展打开了新的局面。

HELUKABEL公司的发展小趣事

全志科技在早期以电源管理IC AXP系列和多媒体解码F系列芯片为核心技术,成功挖掘了第一桶金。特别是在播放器等中小企业需求市场中,全志的产品获得了广泛认可。这种对市场需求的敏锐洞察和扎实的技术研发能力,使得全志在激烈的市场竞争中脱颖而出。

法思特(FAST)公司的发展小趣事
避免同时启动带来的电流冲击和电压波动对设备造成的损害,从而延长设备的使用寿命。
Appointech Inc公司的发展小趣事

Appointech Inc公司深知品质是企业的生命线。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重品牌建设,通过不断提升产品质量和服务水平,树立了良好的企业形象和口碑。

GainSpan ( Telit)公司的发展小趣事

随着业务的不断扩展和技术实力的提升,风华电子厂于1993年实施股份制改革,并更名为广东风华高新科技股份有限公司。1996年,公司在深圳证券交易所成功上市(证券简称风华高科,证券代码000636),成为电子元器件行业的重要一员。上市不仅为公司筹集了更多资金,也进一步提升了公司的知名度和市场竞争力。

CMOS Sensor Inc公司的发展小趣事

随着技术的不断发展,CMOS Sensor Inc公司不断推出创新产品。其中,线型CMOS图像传感器的研发成功,为公司带来了重要的突破。这一产品具有更高的分辨率和更低的噪声,为工业质量保证、商业成像等领域提供了更优质的解决方案。此后,公司又不断对产品进行升级和优化,以满足不同客户的需求。

问答坊 | AI 解惑

电子元件基础教程

工控与测量的基本功…

查看全部问答>

关于Linux嵌入式系统的培训效果!

想参加培训,但是不知道效果如何? 请大家来谈谈自己的经验吧~~ 谢绝销售…

查看全部问答>

串口接收问题

各位大侠好!请教一下,我利用C51的串口向S3C2440的串口1发数据,然后将该数据用串口0显示出来(串口调试工具),两个串口的波特率都是9600,奇偶校验都是一样的,为什么我收到的数据不是我发的数据,我用C51持续不断的发送十六进制的01,可我接受 ...…

查看全部问答>

一个例子看不明白

/* 打问号的地方不明白,希望大家给加下注释,谢谢了 这是一个蜂鸣器的程序(运行在arm9(mini2440)上的Linux下) */ #include #include #include #include #define PWM_IOCTL_SET_FREQ            &nb ...…

查看全部问答>

单片机技术

   单片机的经典电路时咋样的呀,希望大家给点建议啊。最好给个protel 99se的看看。…

查看全部问答>

WinCE中断处理--物理中断号与逻辑中断号的问题

各位大侠好:    小弟现在正在搞WinCE下面的中断处理,遇到了一点问题,希望大家踊跃发言,不吝赐教、    中断处理过程中,需要把物理中断号转化为系统的逻辑中断号,但是我却不怎么清楚物理中断号是怎么回事。看了不少网上 ...…

查看全部问答>

北京 诚聘 windows驱动软件开发工程师(兼或全职)

职位描述 Windows驱动程序设计和实现 职位要求 1.计算机、电子工程、通信、自动化等相关专业本科以上学历; 2.熟练掌握C/C++语言编程; 3.精通WDM, WDF编程,熟悉DriverStudio, WINDBG等开发工具; 4.深入理解Windows操作系统组成原理和内核 ...…

查看全部问答>

wince gprs 拨号的问题

我的程序是先打开串口,然后向串口写入at指令,最后调用rasdial()函数进行拨号连接,现在的问题是拨号能成功但是中间他会弹出一个终端窗口,要我们点 开始 -> 继续  才能继续走下去,我想实现不 弹出任何窗口 直接拨号连接.不知道大家有没有做 ...…

查看全部问答>

基于LM3S8962的多个报文对象的CAN收发例程

本例程所用的驱动库版本是:5961 演示了一个CAN控制器的多个报文对象进行CAN收发, 本例程在Stellaris 8962的评估套件上顺利运行,其中8962板作接收方,2110小板作发送方。  …

查看全部问答>