嵌入式系统作业4+5


第四周
        对照命名格式,给出所用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大小、地址范围。


第五周


        1. 给出 `gpio set(LIGHT_RED,LGHT_OFF);` 语句中LIGHT RED和LIGHT OFF的值是多少?贴出每一步的查找截图。

        LIGHT RED = 263,LIGHT OFF = 1         通过全文件关键字搜索即可


        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 用调用构件方式,实现红绿蓝的八种组合轮流闪烁

gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_OFF);	//初始化蓝灯
    gpio_init(LIGHT_GREEN,GPIO_OUTPUT,LIGHT_OFF);	//初始化绿灯
    gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_OFF);	//初始化红灯
    adc_init(AD_MCU_TEMP,0);					   //初始化AD芯片温度模块
    mcu_temp_AD = adc_read(AD_MCU_TEMP);       //读取mcu温度通道AD值
    temp_AD=adc_read(AD_TEMP);
    
    uart_init(UART_User,115200);     //初始化串口模块
    
    //(1.6)使能模块中断
    uart_enable_re_int(UART_User);
    
    //(1.7) 不变  开总中断
    ENABLE_INTERRUPTS;
    
    //(1)======启动部分(结尾)==========================================
    
    //(2)======主循环部分(开头)========================================
    for(;;)   //for(;;)(开头)
    {
    	printf("\r\n");
        //(2.1)主循环次数变量+1
        //mMainLoopCount++;
        //(2.2)未达到主循环次数设定值,继续循环
        //延时1秒
        Delay_ms(1000);
        //if (mMainLoopCount<=12888999)  continue;
        //(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
        //(2.3.1)清除循环次数变量
        //mMainLoopCount=0;
        mCount++;
        //当秒数40秒时,重新开始计数
        //避免一直累加
        if (mCount >= 40)
        {
            mCount=0;
            printf("指示灯颜色为:暗色  ");
        }
        //(2.3.2)如灯状态标志mFlag为'L',灯的闪烁次数+1并显示,改变灯状态及标志
        if(mCount%5==0)
        {
          gpio_reverse(LIGHT_RED);
          if(mCount/5==1)
          {
            printf("指示灯颜色为:红色  ");
           }
           else if(mCount/5==3)
           {
            printf("指示灯颜色为:黄色  ");
           }
           else if(mCount/5==5)
           {
            printf("指示灯颜色为 紫色  ");
           }
           else if(mCount/5==7)
           {
            printf("指示灯颜色为:白色  ");
           }
        }
        if (mCount%10==0)                    //判断灯的状态标志
        {
            gpio_reverse(LIGHT_GREEN);
            if(mCount/10==1)
            {
             printf("指示灯颜色为:绿色  ");
            }
            else if(mCount/10==3)
           {
            printf("指示灯颜色为:青色");
           }
        }
        if (mCount%20==0)                    //判断灯的状态标志
        {
            gpio_reverse(LIGHT_BLUE);				
            if(mCount/20==1)
            {
            printf("指示灯颜色为:蓝色  ");
            }
        }
        
    }  //for(;;)结尾


        3.2 实验结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值