第四周
对照命名格式,给出所用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 实验结果