嵌入式系统作业(第四周+第五周)

嵌入式系统作业(第四周+第五周)

文章目录

  • 嵌入式系统作业(第四周+第五周)
  • 第四周
    • 对照命名格式,给出所用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 实验结果

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

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

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值