嵌入式Linux驱动学习

发布于:2025-05-27 ⋅ 阅读:(16) ⋅ 点赞:(0)

Ubuntu18 下载链接

https://releases.ubuntu.com/bionic/

Ubuntu配置静态IP

在这里插入图片描述

更新Ubuntu18的镜像源

以清华大学镜像源举例
网站:https://mirrors.tuna.tsinghua.edu.cn/
第一步点开网站搜索ubuntu然后点击问号
在这里插入图片描述
第二步选择自己的Ubuntu版本
在这里插入图片描述
第三步在Ubuntu中复制粘贴镜像源

sudo gedit /etc/apt/sources.list

在这里插入图片描述
最后更新自己的镜像源

 sudo apt-get update

Vscode远程连接Ubuntu18问题

vscode需要使用1.85及以下版本才可以连接上,如果当前版本太高需要回退
vscode链接:https://code.visualstudio.com/updates/v1_85
在这里插入图片描述
注意:Vscode会自动更新至最新版本,请关闭版本更新,当然也可以更新glibc/libstdc++,不过不建议更新,会存在一些未知问题,最简单的办法就是回退Vscode的软件版本,并关闭vscode的自动更新
在这里插入图片描述

stm32mp157通过网线直连电脑组网说明

如果没有路由器可以使用此方法使用PC直连的方式连接,现象如下

FSMP1A>  ping 192.168.1.250
        ethernet@5800a000 Waiting for PHY auto negotiation to complete... done
        Using ethernet@5800a000 device
        host 192.168.1.250 is alive

1、安装tftp服务器和nfs服务器成功
2、windows关闭防火墙
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在Ubuntu中的配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FSMP1A>  setenv serverip 192.168.1.250
FSMP1A>  setenv netmask 255.255.255.0
FSMP1A>  setenv gatewayip 192.168.1.1
FSMP1A>  setenv ipaddr 192.168.1.100
FSMP1A>  saveenv
Saving Environment to MMC... Writing to redundant MMC(1)... OK

注:设置该模式后会导致自己的Ubuntu处于无法与外界网络连接的状态

在这里插入图片描述

NPN:当基极为高电平,集电极和发射极导通 当基极为低电平,集电极和发射极截止
PNP:当基极为高电平,集电极和发射极截止 当基极为低电平,集电极和发射极导通
这也就解释了为什么有些LED灯、蜂鸣器等低电平有效的原因

寻找寄存器

1、根据原理图找到对应的总线挂载的模块,以LED为例
在这里插入图片描述
这里LED0受PI0的控制,也就是GPIOI组的控制,拿到STM32MP157的数据手册,可查看GPIOI通过哪根总线挂载连接到MP157芯片的,根据2.5.2章节可以看到,其挂载在AHB4总线上,挂载地址是0X5000A000,其RCC基地址是0X50000000,
在这里插入图片描述
在这里插入图片描述
2、找到RCC_MP_AHB4ENSETR
在这里插入图片描述

1.RCC_MP_AHB4ENSETR寄存器作用
    设置对应组控制器使能
2.如何确定RCC_MP_AHB4ENSETR基地址
    通过2.5.2章节 1)确定总线名称 2)确定对应组寄存器基地址
3.如何确定RCC_MP_AHB4ENSETR地址
    RCC_MP_AHB4ENSETR地址 = 基地址 + 偏移地址 = 0x50000000 + 0xA28 = 0x50000A28
4.如何通过RCC_MP_AHB4ENSETR寄存器,设置GPIOI组控制器使能
    RCC_MP_AHB4ENSETR[8] = 1 --------> 0x50000A28地址空间中第4位写1,保证其他位不变

3、GPIO
在这里插入图片描述

通过以上分析可知:
1)4个通用寄存器:GPIOx_MODER、GPIOx_OTYPER,、GPIOx_OSPEEDR 、GPIOx_PUPDR
2)2个数据寄存器:GPIOx_IDR 、GPIOx_ODR

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

通过以上分析可知:
1)GPIOx_MODER寄存器作用:设置选择IO口模式(输入、输出、复用、模拟)
2)GPIOx_OTYPER / GPIOx_OSPEEDR寄存器作用:设置输出类型(推挽开漏) 和 速度
3)GPIOx_PUPDR寄存器作用:设置引脚是否需要上下拉电阻
4)GPIOx_ODR寄存器作用:设置引脚输出高低电平

在这里插入图片描述

-----------------以LED1------>PE10引脚为例-----------------
1.GPIOE_MODER寄存器作用
    设置GPIO引脚模式
2.如何确定GPIOI_MODER基地址
    通过2.5.2章节 1)确定总线名称 2)确定对应组寄存器基地址
3.如何确定GPIOI_MODER地址
    GPIOI_MODER地址 = 基地址 + 偏移地址 = 0x5000A000 + 0x00 = 0x5000A000
4.如何通过GPIOI_MODER寄存器,设置PI0引脚为输出模式
    GPIOE_MODER[1:0] = 01 --------> 0x5000A000地址空间中第[1:0]位写01,保证其他位不变

在这里插入图片描述

1.GPIOI_OTYPER寄存器作用
    设置GPIO引脚输出类型
2.如何确定GPIOx_OTYPER基地址
    通过2.5.2章节 1)确定总线名称 2)确定对应组寄存器基地址
3.如何确定GPIOx_OTYPER地址
    GPIOx_OTYPER地址 = 基地址 + 偏移地址 = 0x5000A000 + 0x04 = 0x5000A004
4.如何通过GPIOx_OTYPER寄存器,设置PI0引脚为推挽输出
    GPIOE_OTYPER[0] = 0 --------> 0x5000A004地址空间中第[0]位写0,保证其他位不变

在这里插入图片描述

1.GPIOI_OSPEEDR寄存器作用
    设置GPIO引脚输出速率
2.如何确定GPIOx_OSPEEDR基地址
    通过2.5.2章节 1)确定总线名称 2)确定对应组寄存器基地址
3.如何确定GPIOx_OSPEEDR地址
    GPIOx_OSPEEDR地址 = 基地址 + 偏移地址 = 0x50006000 + 0x08 = 0x50006008
4.如何通过GPIOx_OSPEEDR寄存器,设置PI0引脚输出速率
    GPIOI_OSPEEDR[1:0] = 00 --------> 0x5000A008地址空间中第[1:0]位写00,保证其他位不变

在这里插入图片描述

1.GPIOI_PUPDRR寄存器作用
    设置GPIO引脚是否需要上下拉电阻
2.如何确定GPIOx_PUPDR基地址
    通过2.5.2章节 1)确定总线名称 2)确定对应组寄存器基地址
3.如何确定GPIOx_OPUPDR地址
    GPIOx_PUPDR地址 = 基地址 + 偏移地址 = 0x5000A000 + 0x0C = 0x5000A00C
4.如何通过GPIOx_PUPDR寄存器,设置PI0引脚为禁止上下拉
    GPIOE_PUPDR[1:0] = 00 --------> 0x5000600C地址空间中第[1:0]位写00,保证其他位不变

在这里插入图片描述

1.GPIOI_ODR寄存器作用
    设置GPIO引脚输出高低电平
2.如何确定GPIOx_ODR基地址
    通过2.5.2章节 1)确定总线名称 2)确定对应组寄存器基地址
3.如何确定GPIOx_ODR地址
    GPIOx_ODR地址 = 基地址 + 偏移地址 = 0x5000A000 + 0x14 = 0x5000A014
4.如何通过GPIOx_ODR寄存器,设置PE10引脚输出高低电平
    GPIOE_ODR[0] = 1 输出高电平,LED灯点亮 --------> 0x5000A014地址空间中第[0]位写1,保证其他位不变
注:只需要输出数据,所以只需要配置ODR寄存器即可

网站公告

今日签到

点亮在社区的每一天
去签到