STM32 7-8

目录

ADC

AD单通道

AD多通道

DMA

DMA转运数据

DMA+AD多通道


ADC

AD单通道

AD.c

#include "stm32f10x.h"                  // Device header/*** @brief  初始化AD所需要的所有设备* @param  无* @retval 无*/
void AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADCCLK为六分频GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1, ADC_SampleTime_55Cycles5);//配置输入通道//所选ADC设备,指定ADC通道,规则组序列器中的次序,指定通道采样时间(更快就选小参数,更稳定就选大参数)//初始化ADCADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择//单通道单次转换非扫描模式    //单通道连续转换,非扫描模式ADC_InitStructure.ADC_NbrOfChannel = 1;//通道数目ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描转换模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//非连续转换模式//ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续转换模式ADC_Init(ADC1,&ADC_InitStructure);ADC_Cmd(ADC1,ENABLE);//开启ADC1//进行ADC校准ADC_ResetCalibration(ADC1);//复位校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成ADC_StartCalibration(ADC1);//开始校准while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成//ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
}/*** @brief  获取AD所得值* @param  无* @retval  转化出来的数据量最大为4095*/
uint16_t AD_GetValue(void)
{ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//获取标志位状态(为Reset表示没有转换完成)//大约等待 (1 / 72MHz / 6) X (55.5 + 12.5) = 5.6usreturn ADC_GetConversionValue(ADC1);//调用后会自动清除EOC标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t ADValue;
float Voltage;int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"ADValue:");OLED_ShowString(2,1,"Voltage:0.00V");while(1){ADValue = AD_GetValue();Voltage = (float)ADValue / 4095 * 3.3;OLED_ShowNum(1,9,ADValue,4);OLED_ShowNum(2,9,Voltage,1);//输出整数部分OLED_ShowNum(2,11,(uint16_t)(Voltage * 100) % 100,2);//输出小数部分Delay_ms(100);}}
AD多通道

AD.c

#include "stm32f10x.h"                  // Device header/*** @brief  初始化AD所需设备* @param  无* @retval 无*/
void AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADCCLK为六分频GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化ADCADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择//单通道单次转换非扫描模式    ADC_InitStructure.ADC_NbrOfChannel = 1;//通道数目ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描转换模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//非连续转换模式ADC_Init(ADC1,&ADC_InitStructure);ADC_Cmd(ADC1,ENABLE);//开启ADC1//进行ADC校准ADC_ResetCalibration(ADC1);//复位校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成ADC_StartCalibration(ADC1);//开始校准while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成}/**
*@brief  通过传入不同ADC通道,实现多通道AD,本质还是单通道
*@param  ADC_Channel:所选通道
*@retval 转化出的数据量最大为4095*/
uint16_t AD_GetValue(uint8_t ADC_Channel)
{ADC_RegularChannelConfig(ADC1,ADC_Channel,1, ADC_SampleTime_55Cycles5);//配置输入通道//所选ADC设备,指定ADC通道,规则组序列器中的次序,指定通道采样时间(更快就选小参数,更稳定就选大参数)ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//获取标志位状态(为Reset表示没有转换完成)//大约等待 (1 / 72MHz / 6) X (55.5 + 12.5) = 5.6usreturn ADC_GetConversionValue(ADC1);//调用后会自动清除EOC标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t AD0,AD1,AD2,AD3;int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"AD0:");OLED_ShowString(2,1,"AD1:");OLED_ShowString(3,1,"AD2:");OLED_ShowString(4,1,"AD3:");while(1){AD0 = AD_GetValue(ADC_Channel_0);AD1 = AD_GetValue(ADC_Channel_1);AD2 = AD_GetValue(ADC_Channel_2);AD3 = AD_GetValue(ADC_Channel_3);OLED_ShowNum(1,5,AD0,4);OLED_ShowNum(2,5,AD1,4);OLED_ShowNum(3,5,AD2,4);OLED_ShowNum(4,5,AD3,4);Delay_ms(100);}}

DMA

DMA转运数据

MyDMA.c

#include "stm32f10x.h"                  // Device headeruint16_t MyDMA_Size;/*** @brief  初始化DMA* @param  无* @retval 无*/
void MyDMA_Init(uint32_t AddrA,uint32_t AddrB,uint16_t Size)
{MyDMA_Size = Size;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//开启MDA1时钟DMA_InitTypeDef DMA_InitStructrue;DMA_InitStructrue.DMA_PeripheralBaseAddr = AddrA;//外设起始地址DMA_InitStructrue.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外设数据宽度DMA_InitStructrue.DMA_PeripheralInc = DMA_PeripheralInc_Enable;//外设是否自增DMA_InitStructrue.DMA_MemoryBaseAddr = AddrB;//存储器起始地址DMA_InitStructrue.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte ;//存储器数据宽度DMA_InitStructrue.DMA_MemoryInc = DMA_MemoryInc_Enable;//存储器是否自增DMA_InitStructrue.DMA_DIR = DMA_DIR_PeripheralSRC;//传输方向(外设作为源头)DMA_InitStructrue.DMA_BufferSize = Size;//传输计数器(传输次数)DMA_InitStructrue.DMA_Mode = DMA_Mode_Normal;//传输模式,是否使用自动重装(转运后停止)DMA_InitStructrue.DMA_M2M = DMA_M2M_Enable;//选择硬件触发,还是软件触发(软件触发)DMA_InitStructrue.DMA_Priority = DMA_Priority_Medium;//优先级(多个通道进行配置)DMA_Init(DMA1_Channel1,&DMA_InitStructrue);DMA_Cmd(DMA1_Channel1,DISABLE);//不让DMA初始化后立刻转运
}/*** @brief  将外设数据通过DMA写入存储器* @param  无* @retval 无*/
void MyDMA_Transfer(void)
{DMA_Cmd(DMA1_Channel1,DISABLE);//为传输计数器赋值,需先失能DMADMA_SetCurrDataCounter(DMA1_Channel1,MyDMA_Size);//重新给传输计数器写入值DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMAwhile(DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);//检查DMA1通道1转换完成的标志位(完成标志位置一)//未完成则一直空循环等待DMA_ClearFlag(DMA1_FLAG_TC1);//需要手动清除标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "MyDMA.h"uint8_t DataA[] = {0x01,0x02,0x03,0x04};
uint8_t DataB[] = {0,0,0,0};uint8_t i;int main(void)
{OLED_Init();MyDMA_Init((uint32_t)DataA,(uint32_t)DataB,4);//DataA 转运至 DataOLED_ShowString(1,1,"DataA");OLED_ShowString(3,1,"DataA");OLED_ShowHexNum(1,8,(uint32_t)DataA,8);OLED_ShowHexNum(3,8,(uint32_t)DataB,8);for(i = 0;i < 4;i++){OLED_ShowHexNum(2,3*i+1,DataA[i],2);}for(i = 0;i < 4;i++){OLED_ShowHexNum(4,3*i+1,DataB[i],2);}while(1){DataA[0] ++;DataA[1] ++;DataA[2] ++;DataA[3] ++;for(i = 0;i < 4;i++){OLED_ShowHexNum(2,3*i+1,DataA[i],2);}for(i = 0;i < 4;i++){OLED_ShowHexNum(4,3*i+1,DataB[i],2);}Delay_s(1);MyDMA_Transfer();//开始转运for(i = 0;i < 4;i++){OLED_ShowHexNum(2,3*i+1,DataA[i],2);}for(i = 0;i < 4;i++){OLED_ShowHexNum(4,3*i+1,DataB[i],2);}Delay_s(1);}}
DMA+AD多通道

AD.c

#include "stm32f10x.h"                  // Device headeruint16_t AD_Value[4];/*** @brief  初始化AD以及DMA* @param  无* @retval 无*/
void AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//开启MDA1时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADCCLK为六分频GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1, ADC_SampleTime_55Cycles5);//配置输入通道ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2, ADC_SampleTime_55Cycles5);//配置输入通道ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3, ADC_SampleTime_55Cycles5);//配置输入通道ADC_RegularChannelConfig(ADC1,ADC_Channel_3,4, ADC_SampleTime_55Cycles5);//配置输入通道//所选ADC设备,指定ADC通道,规则组序列器中的次序,指定通道采样时间(更快就选小参数,更稳定就选大参数)//初始化ADCADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择//ADC扫描模式+数据转运 //ADC连续扫描+DMA循环转运ADC_InitStructure.ADC_NbrOfChannel = 4;//通道数目ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描转换模式(设置为扫描模式)//ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//是否为连续模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;ADC_Init(ADC1,&ADC_InitStructure);//配置DMADMA_InitTypeDef DMA_InitStructrue;DMA_InitStructrue.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;//外设起始地址DMA_InitStructrue.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据宽度(16位)DMA_InitStructrue.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设是否自增(始终转运同一位置数据)DMA_InitStructrue.DMA_MemoryBaseAddr =  (uint32_t)AD_Value;//存储器起始地址DMA_InitStructrue.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//存储器数据宽度DMA_InitStructrue.DMA_MemoryInc = DMA_MemoryInc_Enable;//存储器是否自增DMA_InitStructrue.DMA_DIR = DMA_DIR_PeripheralSRC;//传输方向(外设作为源头)DMA_InitStructrue.DMA_BufferSize = 4;//传输计数器(传输次数)//DMA_InitStructrue.DMA_Mode = DMA_Mode_Normal;//传输模式,是否使用自动重装(转运后停止)DMA_InitStructrue.DMA_Mode = DMA_Mode_Circular;//循环模式DMA_InitStructrue.DMA_M2M = DMA_M2M_Disable;//选择硬件触发,还是软件触发(硬件触发)DMA_InitStructrue.DMA_Priority = DMA_Priority_Medium;//优先级(多个通道进行配置)DMA_Init(DMA1_Channel1,&DMA_InitStructrue);//这里的通道必须使用DMA1_Channel1,详情查表DMA_Cmd(DMA1_Channel1,ENABLE);//让DMA初始化后立刻转运ADC_DMACmd(ADC1,ENABLE);//开启ADC触发DMA信号ADC_Cmd(ADC1,ENABLE);//开启ADC1//进行ADC校准ADC_ResetCalibration(ADC1);//复位校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成ADC_StartCalibration(ADC1);//开始校准while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
}/**
*@brief  通过传入不同ADC通道,实现多通道AD,本质还是单通道
*@param  ADC_Channel:所选通道
*@retval 转化出的数据量最大为4095*/
//void AD_GetValue(void)
//{
//    DMA_Cmd(DMA1_Channel1,DISABLE);//为传输计数器赋值,需先失能DMA
//    DMA_SetCurrDataCounter(DMA1_Channel1,4);//重新给传输计数器写入值
//    DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA
//    
//    //ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
//    
//    while(DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);//检查DMA1通道1转换完成的标志位(完成标志位置一)
//    //未完成则一直空循环等待
//    DMA_ClearFlag(DMA1_FLAG_TC1);//需要手动清除标志位
//}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"AD0:");OLED_ShowString(2,1,"AD1:");OLED_ShowString(3,1,"AD2:");OLED_ShowString(4,1,"AD3:");while(1){//AD_GetValue();OLED_ShowNum(1,5,AD_Value[0],4);OLED_ShowNum(2,5,AD_Value[1],4);OLED_ShowNum(3,5,AD_Value[2],4);OLED_ShowNum(4,5,AD_Value[3],4);Delay_ms(100);}}

7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2780666.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

在程序中使用日志功能

在应用中&#xff0c;需要记录程序运行过程中的一些关键信息以及异常输出等。这些信息用来排查程序故障或者其他用途。 日志模块可以自己实现或者是借用第三方库&#xff0c;之前写过一个类似的使用Qt的打印重定向将打印输出到文件&#xff1a;Qt将打印信息输出到文件_qt log输…

【JavaEE】_HTML常用标签

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签&#xff1a;h1~h6 2.3 段落标签&#xff1a;p 2.4 换行标签&#xff1a;br 2.5 格式化标签 2.6 图片标签&#xff1a;img 2.7 超链接标签&#xff1a;a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

C++继承(二):菱形继承、virtual菱形虚拟继承

目录 一、了解菱形继承 二、菱形继承的问题 三、虚拟继承virtual 3.1virtual 3.2虚拟继承解决数据冗余和二义性的原理 四、总结/继承和组合 一、了解菱形继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承 多继承&#xff1a;一个子类有两个或…

C++重新入门-C++ 函数

函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数&#xff0c;即主函数 main() &#xff0c;所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的&#xff0c;但在逻辑上&#xff0c;划分通常…

春节折腾了4天,终于用上了win11和matlab2023b

这个春节折腾了4天&#xff0c;终于与时俱进用上了win11和matlab2023b。 新购的硬盘&#xff0c;顺丰快递给力2天半到手。 先折腾硬盘&#xff0c;连线&#xff0c;没有盘符&#xff0c;使用管理&#xff0c;初始化&#xff0c;格式化&#xff0c;新建卷。下载win11&#xff0…

导数的定义【高数笔记】

【含义】可以抽象成&#xff0c;在一个极其短的时间段内&#xff0c;温度差 / 时间差 【本质】瞬间的平均值 【分类】可以分成几类&#xff1f;每类需要注意的点 【导数存在的必要条件】 【导数与极限的关系】可以参考导数的定义的式子 【题型解法】分几个题型&#xff1f;每个…

2.12作业

程序代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h>//递归实现n! int n(int element) {if(0element)return 1;return element*n(element-1); }//递归实现0-n的和 int sub_sum(int element) {if(0element)return 0;return eleme…

system V——进程间通信

上一篇博客中我介绍了system V进程间通信中的内存共享&#xff0c;但是其中还有两 种通信方式&#xff1a;消息队列、和信号量&#xff0c;接下来我将简单介绍一下&#xff0c;消息队列和 信号量以及操作系统是如何看待system V进程间通信的。1. 消息队列 a. 大致介绍 消息队…

用HTML5 + JavaScript绘制花、树

用HTML5 JavaScript绘制花、树 <canvas>是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。 <canvas> 标签/元素只是图形容器&#xff0c;必须使用脚本来绘制图形。 HTML5 canvas 图形标签基础https://blog.csdn.net/cnds123/article/details/112…

腾讯云4核8G服务器性能如何?支持多少用户访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

{}初始化和初始化列表

C98标准中允许使用花括号对数组和自定义类型的变量进行初始化&#xff0c;C11扩展了大括号的用途&#xff0c;允许使用花括号对所有的内置类型和自定义类型进行初始化&#xff0c;使用时&#xff0c;可以加号&#xff0c;也可以不加。 对于自定义类型&#xff0c;当花括号中的常…

windows 下安装gin

go install 执行命令&#xff0c;执行不了的参考一下 https://blog.csdn.net/weixin_42592326/article/details/135946806 Golang 中没法下载第三方包解决办法-CSDN博客 go install github.com/gin-gonic/ginlatest 还是安装不了的话&#xff0c;用手机开热点&#xff0c;电…

Avaddon勒索病毒解密工具

前言 Avaddon勒索病毒被笔者称为2020年全球十大流行勒索病毒之一&#xff0c;其首次出现于2020年6月在俄罗斯某地下黑客论坛开始出售&#xff0c;该勒索病毒使用C语言进行编写&#xff0c;采用RSA-2048和AES-256加密算法对文件进行加密&#xff0c;该勒索病毒的传播方式多种多…

自动化AD域枚举和漏洞检测脚本

linWinPwn 是一个 bash 脚本&#xff0c;可自动执行许多 Active Directory 枚举和漏洞检查。该脚本基于很多现有工具实现其功能&#xff0c;其中包括&#xff1a;impacket、bloodhound、netexec、enum4linux-ng、ldapdomaindump、lsassy、smbmap、kerbrute、adidnsdump、certip…

第75讲Avatar头像FooterHome实现

Avatar头像实现 avatar&#xff1a; <template><el-dropdown><span class"el-dropdown-link"><el-avatar shape"square" :size"40" :src"squareUrl" /></span><template #dropdown><el-drop…

MySQL基本操作之数据库的操作

一.创建数据库 1.基本语法 create database 数据库名&#xff1b; 注意别忘记加分号。 2.if not exists 数据库名字是唯一的&#xff0c;所以不可以创建已存在的数据库&#xff0c;如下&#xff1a; 重复创建就会报错 所以有了if not exists这个语法&#xff0c;加上之后&…

JAVA设计模式之访问模式详解

访问者模式 1 访问者模式介绍 访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式. 访问者模式(Visitor Pattern) 的原始定义是&#xff1a;允许在运行时将一个或多…

数据分析基础之《pandas(8)—综合案例》

一、需求 1、现在我们有一组从2006年到2016年1000部最流行的电影数据 数据来源&#xff1a;https://www.kaggle.com/damianpanek/sunday-eda/data 2、问题1 想知道这些电影数据中评分的平均分&#xff0c;导演的人数等信息&#xff0c;我们应该怎么获取&#xff1f; 3、问题…

vue3 之 商城项目—layout静态模版结构搭建

layout—模块静态模版搭建 一般情况下我们会有nav区域&#xff0c;header区域&#xff0c;二级路由出口区域以及footer区域&#xff0c;如图 我们在开发的时候先把大模块搭建起来&#xff0c;再一步一步填充小模块 在layout下建文件&#xff0c;目录如下 在index.vue中把上…

DP读书:《openEuler操作系统》(九)从IPC到网卡到卡驱动程序

DP读书&#xff1a;《openEuler操作系统》从IPC到网卡到卡驱动程序&#xff09; 上章回顾_SPI上节回顾_TCP 网卡驱动程序简介1.设备驱动2.总线与设备3.网卡及其抽象 驱动程序的注册与注销1. 注册2. 注销 设备初始化1. 硬件初始化2. 软件初始化 设备的打开与关闭1. 设备的打开2.…