嵌入式系统作业(第四周+第五周)
文章目录
- 嵌入式系统作业(第四周+第五周)
- 第四周
- 对照命名格式,给出所用MCU芯片型号标识所获得的信息。
- 原文
- 译文
- 给出所用MCU芯片的RAM及Flash大小、地址范围。
- 第五周
- 1. 给出 `gpio set(LIGHT_RED,LGHT_OFF);` 语句中LIGHT RED和LIGHT OFF的值是多少?贴出每一步的查找截图。
- 2.1 用直接地址编程方式,实现红绿蓝三灯轮流闪烁
- 2.2 实验结果
- 3.1 用调用构件方式,实现红绿蓝的八种组合轮流闪烁
- 3.2 实验结果
32106200022
第四周
对照命名格式,给出所用MCU芯片型号标识所获得的信息。
原文
译文
STM32L431xx器件是基于高性能Arm®Cortex®-M4 32位RISC内核的超低功耗微控制器,工作频率高达80 MHz。Cortex-M4内核采用浮点单元(FPU)单精度,支持所有ARM®单精度数据处理指令和数据类型。它还实现了一个完整的DSP指令集和增强应用的内存保护单元(MPU)安全。
STM32L431xx器件嵌入高速存储器(闪存高达256 Kbyte,64 Kbyte的SRAM),一个Quad SPI闪存接口(可在所有软件包上使用)和广泛的增强型I/O和外设连接到两个APB总线,两个AHB总线和32位多AHB总线矩阵。
STM32L431xx器件为嵌入式闪存嵌入了多种保护机制内存和SRAM:读出保护、写保护、专有代码读出保护和防火墙。
这些器件提供一个快速12位ADC(5 Msps)、两个比较器、一个运算放大器、两个DAC通道,一个内部电压参考文献缓冲器,一个低功耗RTC,一个通用32位定时器,一个专用于电机控制的16位PWM定时器,四个通用16位定时器和两个16位低功耗定时器。
此外,还提供多达21个电容感测通道。
它们还具有标准和先进的通信接口。
- 三个I2C
- 三个SPI
- 三个USART和一个低功耗通用异步收发设备。
- 一个SAI(串行音频接口)
- 一个SDMMC
- 一个CAN
- 一个SWPMI(单线协议主接口)
STM32L431xx工作温度在-40至+85°C(+105°C交界处),-40至+105°C、-40至+125°C(+125°C结)和-40至+125°C(+130°C结)的温度范围从1.71至3.6 V电源。一套全面的省电模式允许低功耗应用的设计。
支持一些独立电源:模拟独立电源输入ADC、DAC、OPAMP和比较器。VBAT输入允许备份RTC和备份寄存器。
STM32L431xx系列提供从32引脚到100引脚的9个封装。
给出所用MCU芯片的RAM及Flash大小、地址范围。
SRAM2地址范围为0x1000 0000 - 0x1000 4000
Flash memory地址范围为0x0800 0000 - 0x0804 0000
第五周
1. 给出 gpio set(LIGHT_RED,LGHT_OFF);
语句中LIGHT RED和LIGHT OFF的值是多少?贴出每一步的查找截图。
printf("LIGHT_RED=%d, LIGHT_OFF=%d",LIGHT_RED,LIGHT_OFF);
2.1 用直接地址编程方式,实现红绿蓝三灯轮流闪烁
mFlag = 'B'; //初始化标志位
if (mFlag=='B'){ //若灯状态标志为'B'
*gpio_bsrr|=(1<<7); //设置灯“暗”
*gpio_brr|=(1<<9); //设置灯“亮”
mFlag='G'; //改变状态标志
}else if(mFlag=='G'){ //否则,若灯状态标志为'G'
*gpio_bsrr|=(1<<9); //设置灯“暗”
*gpio_brr|=(1<<8); //设置灯“亮”
mFlag='R'; //改变状态标志
}else {
*gpio_bsrr|=(1<<8); //设置灯“暗”
*gpio_brr|=(1<<7); //设置灯“亮”
mFlag='B'; //改变状态标志
}
2.2 实验结果
3.1 用调用构件方式,实现红绿蓝的八种组合轮流闪烁
/(1.3)给主函数使用的局部变量赋初值
mMainLoopCount=0; //主循环次数变量
mFlag='R'; //灯的状态标志
mLightCount=0; //灯的闪烁次数
//(1.4)给全局变量赋初值
//(1.5)用户外设模块初始化
gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_OFF); //初始化蓝灯
gpio_init(LIGHT_GREEN,GPIO_OUTPUT,LIGHT_OFF); //初始化绿灯
gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_OFF); //初始化红灯
for(;;) //for(;;)(开头)
2.1)主循环次数变量+1
mMainLoopCount++;
//(2.2)未达到主循环次数设定值,继续循环
if (mMainLoopCount<=1145141919) continue;
//(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
//(2.3.1)清除循环次数变量
mMainLoopCount=0;
// 红色
if (mFlag=='R') //判断灯的状态标志
{
mLightCount++;
mFlag='G'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_ON); //灯“亮”
}
//(2.3.3)如灯状态标志mFlag为'G',改变灯状态及标志
// 绿色
else if (mFlag=='G') //判断灯的状态标志
{
mLightCount++;
mFlag='B'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_OFF); //灯“暗”
gpio_set(LIGHT_GREEN,LIGHT_ON); //灯“亮”
}
// 蓝色
else if (mFlag=='B') //判断灯的状态标志
{
mLightCount++;
mFlag='Y'; //灯的状态标志
gpio_set(LIGHT_GREEN,LIGHT_OFF); //灯“暗”
gpio_set(LIGHT_BLUE,LIGHT_ON); //灯“亮”
gpio_set(LIGHT_RED,LIGHT_OFF); //灯“暗”
}
// 黄色
else if (mFlag=='Y') //判断灯的状态标志
{
mLightCount++;
mFlag='P'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_ON);
gpio_set(LIGHT_BLUE,LIGHT_OFF);
gpio_set(LIGHT_GREEN,LIGHT_ON);
}
// 紫色
else if (mFlag=='P') //判断灯的状态标志
{
mLightCount++;
mFlag='C'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_ON);
gpio_set(LIGHT_GREEN,LIGHT_OFF);
gpio_set(LIGHT_BLUE,LIGHT_ON);
}
// 青色
else if (mFlag=='C') //判断灯的状态标志
{
mLightCount++;
mFlag='W'; //灯的状态标志
gpio_set(LIGHT_BLUE,LIGHT_ON);
gpio_set(LIGHT_RED,LIGHT_OFF);
gpio_set(LIGHT_GREEN,LIGHT_ON);
}
// 白色
else if (mFlag=='W') //判断灯的状态标志
{
mLightCount++;
mFlag='D'; //灯的状态标志
gpio_set(LIGHT_BLUE,LIGHT_ON);
gpio_set(LIGHT_GREEN,LIGHT_ON);
gpio_set(LIGHT_RED,LIGHT_ON);
}
// 熄灯
else if (mFlag=='D') //判断灯的状态标志
{
mLightCount++;
mFlag='R'; //灯的状态标志
gpio_set(LIGHT_GREEN,LIGHT_OFF);
gpio_set(LIGHT_BLUE,LIGHT_OFF);
gpio_set(LIGHT_RED,LIGHT_OFF);
}
3.2 实验结果