嵌入式作业(四)

作业要求

作业一:

1、对照命名格式,给出所用MCU芯片型号(STM32L431RCT6)标识所获得的信息。

2、给出所用MCU芯片的RAM及Flash大小、地址范围。

作业二:

1、学习CH04示例程序,包括gpio.c和4个工程中的main.c。

2、给出 gpio set(LIGHT_RED,LIGHT_OFF); 语句中,LIGHT_RED和LIGHT_OFF的值是多少?贴出每一步的査找截图。

3、用直接地址编程方式,实现红绿蓝三灯轮流闪烁。

4、用调用构件方式,实现红绿蓝的八种组合轮流闪烁。

作业结果

作业一:

1、MCU芯片STM32L431RCT6型号标识信息

        STM32:芯片家族为32位MCU

        L:产品类型为超低功耗型

        431:高性能微控制器31型号

        R:引脚数目为64

        C:Flash大小为256KB

        T:封装类型为LQFP封装

        6:温度范围为-40℃~+85℃

2、给出所用MCU芯片的RAM及Flash大小、地址范围。

1)STM32L431RCT6的RAM为静态随机存储器,大小为64KB,分成SRAM1和SRAM2,地址范围分别为0x2000_0000~0x2000_BFFF(48KB)和0x2000_C000~0x2000_FFFF(16KB)。大部分编程将它们连续在一起使用,即地址范围为0x2000_0000~0x2000_FFFF,共64KB。

2)STM32L431RCT6的Flash大小为256KB,其地址范围为0x0800_0000~0x0803_FFFF。Flash区中扇区大小为2KB,扇区总共有128个。

作业二:

1)査找LIGHT_RED和LIGHT_OFF的值

打开一个工程,查看其main.c。

点击LIGHT_RED,右键查看定义,转到user.h。

可见,LIGHT_RED的值为(PTB_NUM|7),代表红灯;LIGHT_OFF的值为1,表示灯暗。

2)用直接地址编程方式,实现红绿蓝三灯轮流闪烁。

打开...\04-Software\CH04\GPIO-Output-DirectAddress_STM32L431_20200928工程。

将代码修改为

结果为

LED灯以红->蓝->绿顺序闪烁。

3)用调用构件方式,实现红绿蓝的八种组合轮流闪烁。

打开...\04-Software\CH04\GPIO-Output-Component_STM32L431_20200928工程。

在main函数中初始化蓝、绿、红灯

//(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);    //初始化红灯

添加亮灭规则

//(2.3.2)如灯状态标志mFlag为'L',灯的闪烁次数+1并显示,改变灯状态及标志
        if (mFlag=='A')                    //红灯
        {
            mLightCount++;  
            printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
            mFlag++;                       //灯的状态标志
            gpio_set(LIGHT_RED,LIGHT_ON);  //灯“亮” 
            printf(" 红灯亮--\n");   //串口输出灯的状态
        }
        else if (mFlag=='B')                    //绿灯
        {
            mLightCount++;  
            printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
            mFlag++;                       //灯的状态标志
            gpio_set(LIGHT_RED,LIGHT_OFF);
            gpio_set(LIGHT_GREEN,LIGHT_ON); 
            printf(" 绿灯亮--\n");   //串口输出灯的状态
        }
        else if (mFlag=='C')                    //黄灯
        {
            mLightCount++;  
            printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
            mFlag++;                       //灯的状态标志
            gpio_set(LIGHT_RED,LIGHT_ON); 
            printf(" 黄灯亮--\n");   //串口输出灯的状态
        }
        else if (mFlag=='D')                    //蓝灯
        {
            mLightCount++;  
            printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
            mFlag++;                       //灯的状态标志
            gpio_set(LIGHT_RED,LIGHT_OFF);
            gpio_set(LIGHT_GREEN,LIGHT_OFF);
            gpio_set(LIGHT_BLUE,LIGHT_ON);
            printf(" 蓝灯亮--\n");   //串口输出灯的状态
        }
        else if (mFlag=='E')                    //紫灯
        {
            mLightCount++;  
            printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
            mFlag++;                       //灯的状态标志
            gpio_set(LIGHT_RED,LIGHT_ON);
            printf(" 紫灯亮--\n");   //串口输出灯的状态
        }
        else if (mFlag=='F')                    //青灯
        {
            mLightCount++;  
            printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
            mFlag++;                       //灯的状态标志
            gpio_set(LIGHT_RED,LIGHT_OFF);
            gpio_set(LIGHT_GREEN,LIGHT_ON);
            printf(" 青灯亮--\n");   //串口输出灯的状态
        }
        else if (mFlag=='G')                    //白灯
        {
            mLightCount++;  
            printf("灯的闪烁次数 mLightCount = %d\n",mLightCount);
            mFlag++;                       //灯的状态标志
            gpio_set(LIGHT_RED,LIGHT_ON);
            printf(" 白灯亮--\n");   //串口输出灯的状态
        }
//(2.3.3)如灯状态标志mFlag为'A',改变灯状态及标志
        else                                    //灯灭
        {
            mFlag='A';                       //灯的状态标志
            gpio_set(LIGHT_GREEN,LIGHT_OFF); //灯“暗”
            gpio_set(LIGHT_RED,LIGHT_OFF);
            gpio_set(LIGHT_BLUE,LIGHT_OFF);
            printf(" 灯灭--\n");  //串口输出灯的状态
        }

 编译并进行串口更新

LED灯以 红->绿->黄->蓝->紫->青->白->无灯->红... 的顺序亮起。

  • 31
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XJTU嵌入式作业2要求实现一个简单的温度转换程序。该程序需要输入一个摄氏温度值,并将其转换为华氏温度和开氏温度后输出。 为了完成这个任务,我们首先需要使用C语言编写一个能够进行温度转换的函数。该函数可以接受用户输入的摄氏温度值,并根据转换公式将其转换为华氏温度和开氏温度。 转换摄氏温度到华氏温度的公式如下: 华氏温度 = 摄氏温度 * 9/5 + 32 转换摄氏温度到开氏温度的公式如下: 开氏温度 = 摄氏温度 + 273.15 在程序中,我们可以使用scanf函数来接受用户输入的摄氏温度值。然后,我们可以声明并初始化华氏温度和开氏温度的变量,并根据转换公式进行计算。 最后,我们可以使用printf函数来输出转换后的华氏温度和开氏温度值。 除了实现温度转换的函数外,我们还可以编写一个主函数来测试该函数的正确性。在主函数中,我们可以调用温度转换函数,并将用户输入的摄氏温度值作为参数传递给该函数。 在运行程序时,用户将被要求输入一个摄氏温度值。程序将自动将该温度转换为华氏温度和开氏温度,并将转换结果输出到屏幕上。 总而言之,XJTU嵌入式作业2要求我们通过C语言编写一个温度转换程序。该程序可以将摄氏温度转换为华氏温度和开氏温度,并将转换结果输出到屏幕上。该程序包括一个温度转换函数和一个主函数来测试该函数的正确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值