更新记录:
【20191108】——葛新越
解决“有时下拉一次复位引脚后,直接回到BIOS程序运行”和“有时回到BIOS程序运行后,重新上电无法再回到USER程序运行”的问题。
需要对应修改BIOS程序,详见BIOS程序readme.txt。
【20191108】1/2 引脚复位相关问题解决
在bios_api.c中,添加“component_fun=(void **)(GEC_COMPONENT_LST_START*MCU_SECTORSIZE); ”,获取BIOS函数表首地址。
【20191108】2/2 引脚复位相关问题解决
在BIOS_API_Init中,判断USER中串口更新中断和定时器中断是否为BIOS对应中断地址。若都是,则不作操作;否则修改为BIOS对应中断地址。
【20191109-1】——葛新越
测试在USER程序中继承BIOS底层驱动,包括GPIO,FLASH和UART。
将各自.h文件中USE_BIOS_GPIO,USE_BIOS_FLASH,USE_BIOS_UART设置为1,编译后机器码减少,且各功能正常。
【20191109-2】——葛新越
优化Flash构件,目前可以在任意有效地址(0x08000000-0x20000000)实现flash写入读取任意长度数据数组(数据类型为uint_8)。
【20191109-3】——葛新越
优化警告问题,主要是函数调用或变量赋值时类型不一致(系统强制类型转换时会警告)。
==================================================================================
工程名称:GPIO_Output_C_STM32-191109
版权所有:SUDA-ARM(sumcu.suda.edu.cn)
版本更新:2019-11-09
程序介绍:本程序为STM32的C语言模板工程。
本程序实现了:(1)每1S红灯闪烁一次,并通过串口UARTC(板上标识为uart2)输出红灯亮暗状态;
(2)若串口UART_USER(板上标识为uart0)接收到数据,则会将会回发收 到的数据(波特率115200)。
==================================================================================
1. 工程概述
(1)本工程为STM32L431RC微控制器无操作系统C语言模板工程
(2)使用串口UARTC(板上标识为uart2)与外界通信,波特率为115200,1位停止位,无校验
(3)启动串口UART_USER(板上标识为uart0)接收中断,回发接收数据
(4)在60秒内连续拉低ReSet脚6次以上(包括6次)程序回到BIOS运行,绿灯闪烁
2. 软件环境
(1)AHL-GEC-IDE V3.57
3. 硬件环境
核心板:金葫芦系列STM32L432RC核心板
UART2接线: microUSB串口线
UART0接线: USB转TTL串口线(如:PL2303HX)
4. 串口更新程序流程
将烧录了BIOS程序的MCU上,用于串口更新的串口(本工程中为UART2)与PC机连接;给MCU上电,并打开上位机程序,便可以开
始串口更新。串口更新的程序步骤如下:
(1)握手并获取MCU芯片信息:上位机程序点击“软件更新”->“串口更新”,进入串口更新界面。选择“重新连接”时,上位机会遍历连
接在PC机上的设备,逐个发送握手帧,握手帧得到MCU的正确回应时表示握手成功;此后,上位机会再发送一个命令帧获取芯片信息。
5.NMI中断(STM32L432RC没有NMI,以ReSet脚模拟)
使用场景:烧入User程序后出现错误,可将复位脚在一分钟内拉低6次以上(包括6次)使程序回到BIOS运行
实现的功能(04_GEC/gec.c中的pin_reset_judge();函数):
(1)在60s内连续拉低NMI引脚6次以内(不含6次),实现拉低一次NMI引脚绿灯闪烁一次,而后红灯闪烁USER程序正常运行;
(2)在60s内连续拉低NMI引脚6次,实现绿灯闪烁,一直停留在BIOS程序运行,此后(指无时长限制)再点NMI引脚还是停留在BIOS运行;
6.MCU扇区分配
(1)Flash分配
BIOS的FLASH: 0~16扇区, 0x08000000~0x08008800, 34KB
DY_CMD: 17~18扇区, 0x08008800~0x08009800, 4KB
CPT_LST: 19~20扇区, 0x08009800~0x0800a800, 4KB
CPT_FUN: 21~25扇区, 0x0800a800~0x0800d000, 10KB
USER的USER_INTVEC:26扇区,0x0800d000~0x0800d800, 2KB
FLASH:27~127扇区, 0x0800d800~0x08040000,202KB
(2)RAM分配
BIOS的RAM:64KB
GEC_BIOS_RAM_START = 0x20000000; /*BIOS RAM区域起始地址 */
GEC_BIOS_RAM_END = 0x20010000; /*BIOS RAM区域结束地址*/
User的RAM:56KB
GEC_USER_RAM_START = 0x20002000; /*USER RAM区域起始地址 */
GEC_USER_RAM_END = 0x20010000; /*USER RAM区域结束地址*/
7.BIOS和USER程序的衔接
(1)BIOS和USER程序的相互跳转
BIOS跳转到USER实现:将USER程序Flash的前两个字(即SP的初始值和复位向量)赋值给SP和PC指针;
USER跳转到BIOS实现:调用系统复位函数NVIC_SystemReset函数。
(2)共享中断服务例程
将中断向量表从BIOS的Flash拷贝到User的FLASH起始扇区,并将中断向量表的起始地址寄存武器SCB->VTOR修改为User的FLASH的中断向量表起始地址;
BIOS若使用某个中断服务例程不需要修改RAM的中断向量表的表项,而USER若使用某个中断服务例程需要对应的修改User的FLASH中断向量表的表项。
=============================================================================
声明:
(1)本源代码,在所提供的硬件系统测试通过,真诚奉献给社会,不足之处,欢迎指正。
(2)若使用其他硬件系统,移植代码时,请仔细根据自己的硬件匹配。
----------------------------------------------------------------------------
SD-ARM 技术服务:http://sumcu.suda.edu.cn; 0512-65214835
=============================================================================
C语言中的唯一的一个三目运算符
mFlag=(mFlag=='A'?'L':'A');
printf((mFlag=='A')?" LIGHT_RED:OFF--\n":" LIGHT_RED:ON==\n");
stm32嵌入式实验考核33
需积分: 0 193 浏览量
更新于2024-01-25
收藏 1.04MB 7Z 举报
在本实验中,我们将深入探讨如何使用STM32微控制器进行嵌入式系统开发,以实现LED数码管显示环境温度的功能。STM32是意法半导体(STMicroelectronics)推出的一系列基于ARM Cortex-M内核的微控制器,以其高性能、低功耗和丰富的外设接口而广受欢迎。
我们需要理解STM32的基本架构。STM32家族包含了多种型号,如STM32F0、STM32F1、STM32F4等,它们的核心速度、内存大小和外设支持各有不同。在这个实验中,我们可能会用到STM32F1或更高级别的芯片,因为它们通常具有足够的处理能力来执行温度读取和数字显示任务。
为了显示温度,我们需要一个温度传感器,例如DS18B20或TMP36,这些传感器可以提供模拟或数字输出,与STM32的ADC(模数转换器)接口相连接。通过读取传感器的输出并将其转换为温度值,我们可以获取环境温度。ADC的工作原理是将连续的模拟信号转换为离散的数字值,这在嵌入式系统中是常见的操作。
接下来,我们要实现LED数码管显示。数码管通常由7个段(a、b、c、d、e、f、g)和一个小数点组成,可以显示0-9的数字。为了驱动数码管,我们需要配置STM32的GPIO(通用输入/输出)端口,设置正确的电平来点亮或熄灭各个段。我们可能需要使用扫描法或者动态显示技术,以便在有限的GPIO资源下驱动多个数码管,同时降低功耗。
程序设计上,我们需要编写固件代码来控制STM32的外设。这包括初始化ADC,配置定时器来定期读取温度,以及控制GPIO来更新数码管的显示。C语言是最常用的编程语言,可以使用HAL库或LL库来简化STM32的编程。HAL库提供了抽象化的函数接口,而LL库则提供了更低层次的直接访问硬件的接口,两者各有优势,可以根据项目需求选择。
在实现过程中,我们还需要考虑温度的处理,比如滤波和四舍五入。由于传感器可能会有噪声,对连续的温度测量结果进行滑动平均或指数移动平均可以提高显示的稳定性。保留两位小数的温度显示需要在软件中进行适当的数学运算。
对于调试和测试,我们可以使用STM32的调试接口,如JTAG或SWD,配合如STM32CubeIDE这样的开发工具进行程序下载和调试。同时,通过串行通信接口(如UART)将温度数据输出到PC,可以帮助我们验证程序的正确性。
这个实验涵盖了STM32微控制器的使用、ADC接口的应用、GPIO控制、温度传感器的读取以及数码管的显示等多个嵌入式系统开发的关键知识点。通过完成这个实验,你将能深入理解嵌入式系统的设计和实现,并具备处理类似项目的实际经验。
橙汁333
- 粉丝: 58
- 资源: 49
最新资源
- 大炮打蚊子c-test-day-4.9.rar
- 研究电力系统暂态单机无穷大系统,附加PSS,有无PSS下仿真的波形,包含稳态运行,机端小扰动仿真实验,机端突然三相短路实验 可直接出波形
- 21_武汉天元锅炉新员工培训实施细则.doc
- 18、TCL新员工培训班级建制及日常管理办法.doc
- 22_物业管理新员工培训资料(DOC 118页).doc
- 41 _培训案例大全.doc
- 大炮打蚊子c-test-day-4.10.rar
- 33-EMBA管理培训游戏.doc
- 31-员工趣味(培训)运动会.doc
- 20-企业培训游戏集锦.doc
- 05-互动游戏.doc
- 【晋升管理】员工晋升通道.docx
- 【晋升管理】员工晋升及晋级管理办法.docx
- 【晋升管理】人员晋升公示.docx
- 【晋升管理】员工晋升管理制度.doc
- 【晋升管理】晋升述职报告.pptx