【直达本质】超快 STM32 系统入门指南

2023-05-16

 计算机类的教程多,框架和 API 用法讲的全面,成系统的教程很多,CSDN上、知乎上很多个人学习记录和全面的成书的教程,而且生动形象有甚至有动画讲解,回过头来看嵌入式的教程,又臭又长。本文 Github 地址。

两种学习模式,一种是从底层开始看大厚书学习,但这只适合那些理解能力和前后关联能力强甚至有天赋的人来看,说白了不是设计给新人看的,而是给熟练的人当字典来看的,现在学校的课本一上来直接怼抽象的概念和公式,可能导致的在网上写教程的也有这毛病,不人性化。另一种学习是面向应用来学,就是下面要说的,是 “真-面向应用”,对于超快 STM32 入门来说就是:听正常人能理解的句子来了解外设概念和意义,然后直接从 API 入手。

这篇文章需要有 基本数模电和单片机的概念、C 语言基础和良好英文(或翻译)。


目录

第一个外设

进入主题

资源站

总结


第一个外设

这时候可以备好 STM32 编程手册《STM32F10xxx参考手册》。

GPIO(General-purpose input/output)为通用目的输入输出口,所谓通用即不只可以用软件控制高低电平的变化,还有输入、开漏等功能,根据不同应用场景配置成不同功能。以下是该外设的内部数字电路的电路框图。

该图就是 STM32 芯片 里面 GPIO 外设部分的真实存在的电路的框图。

下面两个 P-MOS 和 N-MOS 就是控制输出 I/O 口的高低电平,如果 P-MOS 导通,则输出高电平,这称为 “推挽输出” 模式,输出有一定的驱动能力,输出高电平为 芯片供电电压,即 3.3V,低电平为接地,即 0V,可以先这么理解。

如果 下面两个 P-MOS 和 N-MOS 均不导通,那就是 “浮空输入” 模式,外接的高低电平可以读入,外部接上按键,就可以用按键控制东西。

如果 输出的时候是 P-MOS 一直处于关闭状态,而只有 N-MOS 打开或关闭,那就是 “开漏输出” 模式,在该口上拉一个电阻到 Vref 电压,那么输出高电平就是 Vref 电压,这么做可以改变输出高电平的电压,可以任定,而不是上面 “推挽输出” 时候固定的 3.3V。

图中还有还有上、下拉电阻,还有复用功能,就是配置别的外设比如 SPI、PWM 等的输出要从此 I/O 输出,这些功能组合可以得到这些模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽式输出、推挽式复用功能、开漏复用功能。

进入主题

下载、安装和会用 STM32CubeMX 软件。

STM32CubeMX 新建一个工程,选择 STM32F103C8T6,将 PA8 设为 推挽输出模式,如下图。

导出工程。路径不要有中文和空格,IDE 选择 MDK(即 Keil 5),右上角生成。

打开 MDK 工程。

打开 main.c 即看到写用户程序的地方,我们在 STM32CubeMX 软件里面图形化的配置了一个推挽输出模式的 PA8 引脚,所以现在工程中有了一个 MX_GPIO_Init() 函数,里面就是通过 HAL 库配置该 I/O 的程序。下面添加上注释来说明。

  /* 声明一个 GPIO_InitTypeDef 类型的结构体 名叫 GPIO_InitStruct,该结构体打包了配置 I/O 的所有参数,填这个结构体即可 */
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* 使能 GPIO 的时钟,STM32 中,每个外设都要有时钟信号做驱动,数字电路尤其是时序、同步逻辑电路,当然都需要时钟 */
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /* 预先设置该 I/O 的输出电压。在初始化之前,I/O 是浮空的,当初始化完毕之后 I/O 立马变为设置的高或低电平 */
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);

  /* 配置 I/O,结构体 GPIO_InitStruct 共有 Pin、Mode、Pull 和 Speed 这几个参数,分别填为 I/O口 8、推挽输出、没有上下拉电阻、翻转速度为低
   然后调用 HAL_GPIO_Init() 函数,填入 结构体 GPIO_InitStruct 的指针,该函数会根据结构体 GPIO_InitStruct 里面的参数配置 I/O 的寄存器 */
  /*Configure GPIO pin : PA8 */
  GPIO_InitStruct.Pin = GPIO_PIN_8;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

那么问题就来了,结构体 GPIO_InitStruct 共有 Pin、Mode、Pull 和 Speed 这几个参数,除此之外,库里面外设那么多,每个外设都有好几个结构体和那么多 API,我怎么知道怎么用?

先进行全编译,如下图。不全编译不能做下一步的 “跳转”。

GPIO_InitTypeDef 上面右击,选择 Go To Definition Of 'GPIO_InitTypeDef',即可跳转到 stm32f1xx_hal_gpio.h 文件里面 该结构体类型定义的地方。

在这里面,一目了然,该结构体都有哪些参数,每一个参数都是做什么的,如下图。

那么每一个参数可以填写的值,HAL 库也有定义,每一项后面都有注释,比如上图的 Mode 参数,注释说 可填入的值 参考 GPIO_mode_define这里,那么就 按快捷键 ctrl+f 调出搜索框,填入GPIO_mode_define搜索,如下图,找到这些宏定义。其中GPIO_MODE_INPUT就是浮空输入模式,GPIO_MODE_OUTPUT_OD就是开漏输出模式,GPIO_MODE_ANALOG就是模拟输入模式(用于 ADC 模数转换外设引脚),带有 AF 字样的就是复用功能,带有 IT 字样的就是中断功能。

HAL 库好就好在,每个外设的配置流程和结构体、宏定义的命名非常规范,命名有意义而且有规律。结构体知道怎么填写了,那么想知道一个外设有哪些 API,就在每一个外设的 .h 文件里面。还在stm32f1xx_hal_gpio.h里面,如下图所示,就是 GPIO 外设所有的可供用户调用的函数,即Exported functions部分。其中HAL_GPIO_Init()为初始化函数,HAL_GPIO_ReadPin()为读 I/O 电平函数,HAL_GPIO_WritePin()为写 I/O 电平函数,等等。

还有最后一件事,这些 API 在哪里使用,比如初始化时候先用什么后用什么,这些也在源码注释里有详细的介绍,请打开stm32f1xx_hal_gpio.c文件,拉到最上面,如下图。两大块,第一个GPIO Peripheral features就是介绍该外设的特性,即能做什么,另一个How to use this driver就是细致介绍如何使用这些 API,即怎么做,需要会英文或者用翻译哈。这里介绍的是 GPIO 外设,HAL 库具有一贯性,对于每一个外设的源文件和组织形式都是这样的哈,比较人性化。

我跟你讲,大多数第一个写教程的,基本都是看源码、看源码注释和看官方手册,再加上不断测试、验证想法而得到足够多经验的时候才学会的,所以我这里把这个从源头获取技能的流程介绍一遍,是更有用的。

该工程还包括的函数SystemClock_Config()用于 STM32 时钟(RCC)初始化,其它还包括 STM32 的众多外设,在此不多做介绍,渔已经演示了。还有一些底层概念需要了解,接着往下看。

看看 MDK 界面中左边的各种源文件:

  • main.c:就是用户写主程序的地方。

  • startup_stm32f103xb.s:该文件是官方用汇编写成的启动文件,MCU 是微处理器,处理器就是一个复杂的数字电路,该电路的核心有很多寄存器(处理器寄存器)需要初始化,启动文件就是把这些初始化程序固定下来,用户不用管也不用改动,主要内容有初始化中断向量表、定义堆栈空间、准备 C 语言环境和跳转到 main() 函数等等。

    ARM Cortex-M 系列处理器在函数跳转的时候有硬件自动的使用栈来保存现场和恢复现场:

    ARM 系列系列详细看这篇文章【主线剧情 番外01】ARM & SOC 系列快速鸟瞰 - 知乎 (zhihu.com),

    栈和跳转等可以看 【主线剧情01】ARM & i.MX6ULL 基础学习记录 - 知乎 (zhihu.com) 这篇文章最后的 “ARM异常处理 & 启动文件的示例” 章节,虽然这些知识点对于新人有点超前了。

  • stm32f1xx_hal_gpio.hstm32f1xx_hal_gpio.c :这类文件就是 HAL 库的源文件,操作外设就调用这些文件里面的 API 即可,所有 API 和详细使用方法 在 .h 和 .c 文件的注释里均有详细说明。

  • stm32f103xb.h:该文件定义 stm32f103xb 系列 MCU 的所有 外设的寄存器,给各个外设的寄存器地址上面加个结构体,以便访问和修改,下文会帮助理解这段话。

MCU 的外设的寄存器都被映射到内存的各个地址上(物理连接),在 C 语言中读/写该寄存器,就是读该外设的状态和控制外设行为,外设本质都是数字电路,外设只会根据寄存器内 0 / 1 二进制值去做对应的行为。

以下例子,比如要对内存中 0x20E0084 位置开始的四个字节进行复位(写 0)和置位(写 1)的操作,C 语言写法如下(程序引自 Staok/coding-style-and-more):

static volatile unsigned int *reg_temp = (volatile unsigned int *)(0x20E0084);

/* 置位的标准写法 */
/* 下句表示把 内存中 0x20E0084 位置的 第1、2、5、14位进行置1,其他位不变 */
*reg_temp |= ( (1 << 14) | (1 << 5) | (1 << 2) | (1 << 1) );

/* 清位的标准写法 */
/* 下句表示把 内存中 0x20E0084 位置的 第0、3位进行清0,其他位不变 */
*reg_temp &= ( ~( (1 << 3) | (1 << 0) ) );

 /* 读寄存器 */
volatile unsigned int val = *reg_temp;

进一步,MCU 有上千个寄存器,这么一个一个定义肯定不行,下面就是 HAL 库里面的方法,将结构体的地址赋值为相应寄存器的地址,即创建内存地址上连续区域的结构体,该方法常用于嵌入式开发。如下例子(程序引自 Staok/coding-style-and-more):

typedef struct 
{
    volatile unsigned int  URXD;            /**< UART Receiver Register, offset: 0x00 */
    volatile unsigned char RESERVED_0[60];
    volatile unsigned int  UTXD;            /**< UART Transmitter Register, offset: 0x40 */
    volatile unsigned int  UCR1;            /**< UART Transmitter Register, offset: 0x44 */
} Periph_x_Type;

/* Periph_x 这个外设的寄存器的基地址为 0x2020000 */
#define Periph_x_BASE      (0x2020000u)

/* 设置结构体 Periph_x 的地址为 Periph_x_BASE */
#define Periph_x           ((Periph_x_Type *)Periph_x_BASE)

/* 读取和设置寄存器(这里以置位举例) */
Periph_x->UCR1 |= (1 << 2);

接着打开stm32f103xb.h文件,看看是不是所有外设的寄存器都被打包成了结构体,然后把结构体的地址赋值为对应寄存器的地址。

比如 TIM2(定时器 2) 外设的寄存器地址定义如下,外设基地址 + 外设偏移地址。

然后定义将所有 TIM 外设有关的寄存器打包的结构体,如下图所示。

然后将 TIM2 的地址(TIM2_BASE)强转为TIM_TypeDef指针类型,然后将这个整体重命名为 TIM2,如下图。

到此,该外设寄存器地址与该结构体绑定完成,以后访问结构体 TIM2 下面的参数,都是直接访问对应的实体寄存器。

STM32 HAL 库将这些对寄存器的操作封装成了函数,调用函数即可操控外设。

STM32 的库函数有两个,标准库 和 HAL 库,前者早在 2011 年停止更新维护, HAL 库是现行主流的,STM32CubeMX 软件生成的工程就是使用 HAL 库的,不过我不太信任用该软件生成的工程,而且该软件产生的工程所用的 HAL 库与单独下载 HAL 库在 API 上竟有出入,所以一般我习惯拿它来产生驱动配置程序,然后手动移植到自己的工程,这样心里有底。

以上描述的过程是自己探索与发现的形式,就像探索世界,但可能也会遇到很多新东西和困难,有参考总归比没有强,推荐可以同时参考一个手册来学,比如正点原子的 STM32 的 HAL 库的手册,开源的可以免费下载,下面就是各大厂的资料网址汇总。

资源站

各大厂家对 STM32 出了特别特别特别丰富的教程和例程,如果比较熟悉外设,直接看他们的例程源码即可,快速掌握各种技巧。各大家的官网和资料下载地址如下:

正点原子:

  • OpenEdv-开源电子网-正点原子论坛 有问题可以在这里找,也可以平时没事逛一逛;

  • 正点原子官方的个人空间_ 哔哩哔哩 _bilibili 所有教学视频;

  • 原子哥教学平台,专注电子技术教学 (yuanzige.com);

  • 正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档 (openedv.com) 各种开发板的电路原理图、例程和教程 统统薅走!

野火:

  • 野火电子论坛 - (firebbs.cn) 论坛;

  • 野火_ firege的个人空间 _ 哔哩哔哩 _bilibili 所有教学视频;

  • 野火产品资料下载中心 — 野火产品资料下载中心 文档 (embedfire.com) 薅羊毛。

安富莱:

  • 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn) 论坛;

  • 武汉安富莱电子有限公司官方网站。STM32开发板,无线IO模块,H7-TOOL工具,嵌入式系统 (armfly.com) 官网;

  • 【安富莱】各种开发板和模块的资料下载汇总贴(2021-08-30) - 安富莱电子 - 博客园 (cnblogs.com) 资料下载站。

硬石:

  • 硬石电子 - 社区 (ing10bbs.com) 论坛;

  • 硬石科技的个人空间_ 哔哩哔哩 _bilibili 教学视频;

  • 硬石开源资料下载链接(该帖总是最新资料) - 硬石资料更新 - 硬石社区社区 (ing10bbs.com) 资料下载站。

原子、野火、安富莱和硬石各有侧重,可以广泛借鉴:野火、正点原子 非常全面;安富莱偏 M4F 的 DSP 使用;硬石偏电机控制,有步进电机、有、无刷电机。

STM32 官网资料下载站,是源头,可以找到任何官方的东西,包括选型手册,好好把握:

  • 中文站:STM32 | 产品 | STM32/STM8 | MCU单片机 | 意法半导体STM | 意法半导体STM | STM32/STM8微控制器 | MCU单片机 (stmcu.com.cn);

  • ST 官方:微控制器与微处理器 - STMicroelectronics。

总结

上述方法一句话总结。外设的概念,比如 FSMC、DMA 等,可以先上网查,知道它是做什么的(比如 UART 外设是串口来收发数据,I2C、SPI,重点看明白时序图,FSMC 是 SRAM 接口外设,DMA 是数据在内存间通过硬件传输的途径且不占用处理器资源,等等),然后用 STM32CubeMX 生成例程,看外设如何初始化(看例程学习是最快的),然后看源码注释了解 API 详细使用(当成字典随用随查),就用起来一个外设了,然后按此法循环每一个外设,外设都依照此方法一个一个击破,精神集中的话没几天就掌握不少外设的使用了。

这里有一个 STM32 程序模板 Staok/stm32_framework (github.com),其几乎写好了大部分外设的驱动,大块复制的时候要注意其开源协议。这里有一个 C 语言的编写规范 Staok/coding-style-and-more (github.com),其几乎 “无所不包”。

要知道适合大多数人的上道的学习,是先会用(会快速获得成就感,如同游戏般及时获得反馈),然后再去了解架构和细节方面的东西(有兴趣、有信心了之后才会面对这些而不犯怵),当用的比较熟了之后,有了一些自己的感悟和理解,然后去 干 大部头的教程,比如几十个小时的视频或者上千页的 PDF(推荐只看 PDF 文字教程而不去看视频教程)。

—— 我一直觉得,应该减少人们走弯路,这也是 “二项玻”定则 中 “简化之能够简化” 的一个重要延申理念。peace。


首发  知乎 Github 地址 于 2021.9

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【直达本质】超快 STM32 系统入门指南 的相关文章

  • 树莓派烧录系统且无显示器使用putty和VNC远程桌面连接

    目录 一 树莓派硬件二 镜像烧写及远程连接前的准备1 xff09 下载镜像文件及安装工具2 xff09 烧录镜像文件3 xff09 创建两个文件4 xff09 寻找树莓派的 IP 地址 三 puTTY 远程连接1 xff09 puTTY 安
  • 基于 MDK 创建 STM32 汇编程序:串口输出 Hello world

    目录 一 编写代码二 结果显示三 总结四 参考资料 说明 xff1a 本文在 基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容 的基础上用汇编程序完成一个输出 Hello world 到串口的程序 实验工具 野火串口调试
  • 解决unable to access ‘https://github.com/...‘: OpenSSL SSL_read: Connection was reset, errno 10054

    1 git config global http sslVerify false 2 分别输入两行命令 git config span class token operator span global span class token op
  • 树莓派开机自动连接wifi设置,并修改静态IP

    一 修改配置文件 修改配置文件 etc wpa supplicant wpa supplicant conf 在终端中输入 xff1a sudo nano etc wpa supplication wpa supplication conf
  • Gazebo仿真PX4运行roslaunch PX4 mavros_posix_sitl.launch时报错Required process [sitl-2] has died 解决方法

    报错如图 解决方法为卸载Gazebo9安装Gazebo9 19 参考下文中4 4部分 xff0c 问题类似但解决方法相同 xff1a https blog csdn net qq 38768959 article details 10604
  • PTA第十五周

    6 4 指定位置输出字符串 20分 本题要求实现一个函数 xff0c 对给定的一个字符串和两个字符 xff0c 打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符 函数接口定义 xff1a char mat
  • 6-27复习

    1 while语句的一般形式如下 xff0c 其中的循环体语句只能是一条语句 while 表达式 循环体语句 答案 xff1a T 解析 xff1a for 循环和while 循环循环体都是一条语句 xff0c 但是可以加 变成复合语句 x
  • 如何在Ubtun上安装vscode,保姆级教程

    Ubtun安装vscode 打开vm虚拟机安装VM tools 主要目的 xff1a 实现win上的文件与vm虚拟机上的文件进行共享 具体过程 参照B站 Ubuntu安装vmware tools和open vm tools Ubuntu安装
  • python matplotlib生成图表基础

    本节的目标是绘制一个y 61 x 2的函数图像 plot图表 绘制图表 plot xff08 xff09 函数绘制图表 xff0c 传入参数 xff0c 输入值和输出值 xff0c 还可以指定其他参数 plt span class toke
  • Cannot make a static reference to the non-static method XXX() from the type XXX

    不能用调用静态方法的方式调用一个非静态的方法 xff1a 我在定义方法的时候不是static的 出现这个报错是因为java调用任何方法都要实例化 xff0c c 43 43 里有函数的概念 xff0c 但是java里的函数实际上是类的方法
  • 【2022_10_17】PX4学习

    commander cpp内 int Commander custom command int argc char argv 221行 该函数接受所有commander输入的参数 xff0c strcmp比较后调用不同的函数 strcmp返
  • how to solveE:Unmet dependencies.Try‘apt --fix ^^^^^

    span class token function sudo span span class token function apt span span class token function install span span class
  • PX4报错FAILED: external/Stamp/sitl_gazebo/sitl_gazebo-configure解决

    PX4仿真gazebo报错 make px4 sitl default gazebo Configuring incomplete errors occurred span class token operator span See als
  • 汉诺塔问题的解法

    问题描述 相传在古印度圣庙中 xff0c 有一种被称为汉诺塔 Hanoi 的游戏 该游戏是在一块铜板装置上 xff0c 有三根杆 编号A B C xff0c 在A杆自下而上 由大到小按顺序放置64个金盘 如下图 游戏的目标 xff1a 把A
  • 51单片机——串口通信(发送和接受数据)

    目录 一 实现的功能 二 串口通信 2 1单片机发送数据 2 1 1串口初始化 2 1 2串口发送程序 2 1 3发送效果 2 2单片机接收数据 2 2 1串口初始化 2 2 2接收数据程序 2 2 3接收效果 一 实现的功能 通过串口 x
  • 无人机仿真SLAM_gazebo&promethues

    无人机仿真 总体概述系统要求 PX4固件简介无人机固件整体框图无人机软件框图无人机硬件模型 Mavlink模块位置估计与姿态估计模块安装与编译二次开发 机载计算机程序控制模块估计模块仿真模块SLAM模块SLAM效果演示 总体概述 无人机仿真
  • 编译orbslam2时,Pangolin could not be found because dependency Eigen3 could not be found,解决方法

    是因为使用了pangolin0 6版本 xff0c 需要重新安装0 5版本的pangolin 1 在pangolin的build文件夹下 sudo make uninstall 2 usr local include 删除pangolin文
  • CMakeLists.txt常用语法

    0 绪 cmake 是一个跨平台 开源的构建系统 它是一个集软件构建 测试 打包于一身的软件 它使用与平台和编译器独立的配置文件来对软件编译过程进行控制 1 常用命令 1 1制定cmake最小版本 cmake minimum require
  • Vue 模板

    原文 在Vue中 xff0c Vue模板对应的就是Vue中的View xff08 视图 xff09 部分 xff0c 也是Vue重中之一 xff0c 而在Vue中要了解Vue模板我们就需要从两个方面来着手 xff0c 其一是Vue的模板语法
  • Ubuntu:系统分区

    在系统分区之前 先进行磁盘分区 这里针对的是window10系统下安装ubuntu双系统 需要在window10下进行磁盘分区来安装ubuntu系统 一 磁盘分区 win10系统下 右击此电脑 xff0c 点击管理就进入磁盘管理 这时候可以

随机推荐

  • Mac 安装node.js

    Mac系统安装Node js xff0c 下载地址 如上图安装路径 xff1a This package will install Node js v16 19 1 to usr local bin node span class toke
  • MySQL 常用函数(二)

    ABS函数 xff1a 求绝对值 绝对值函数 ABS x 返回 x 的绝对值 正数的绝对值是其本身 xff0c 负数的绝对值为其相反数 xff0c 0 的绝对值是 0 span class token keyword SELECT span
  • MyBatis Mapper常用动态SQL之foreach 、if、choose、where、when

    if语句 lt if gt 判断语句 xff0c 用于单条件分支条件判断 使用 lt if gt 元素对参数username和jobs进行非空判断 xff0c 并动态组装SQL xff1a span class token keyword
  • Java 查看官方Java API文档

    话不多说 xff0c 直接上方法 打开官网址 xff1a http www oracle com technetwork cn java javase downloads index html 方式一 在线浏览 点击Java 文档 xff1
  • iOS-微信分享成功回调问题

    本人用ShareSDK做分享和第三方登录 xff0c 登录先不讲 xff0c 本节只做分享成功或失败后回调问题 相信好多人会有这个疑惑就是在微信分享成功后没有成功后的方法回调 xff0c 我在ShareSDK论坛也发表过帖子问过 xff0c
  • iOS-常见三种加密(MD5、非对称加密,对称加密)

    任何应用的开发中安全都是重中之重 xff0c 在信息交互异常活跃的现在 xff0c 信息加密技术显得尤为重要 在app应用开发中 xff0c 我们需要对应用中的多项数据进行加密处理 xff0c 从而来保证应用上线后的安全性 xff0c 给用
  • iOS-开辟子线程(NSThread、NSOperationQueue、GCD)

    本节主要总结一些开辟子线程的常用的几种方法 一 通过NSThread类开辟子线程 1 NSThread手动开启子线程 span class hljs comment 创建线程对象 span span class hljs built in
  • Mac 安装 IntelliJ IDEA 以及激活方法

    之前一直在苹果移动端开发 xff0c 这里想了解下Java后台的开发 xff0c 以至于更好的配合后台工作 xff0c 下面说下破解版的安装过程 xff08 Mac xff09 第一步 xff1a 下载Java开发工具 这里我们选择比较好的
  • Mac IntelliJ IDEA连接和操作MySQL数据库

    想要IntelliJ IDEA后台开发 xff0c 数据库的连接时必不可少的 xff0c 这里我们选择开源的 xff0c 同时也是使用人数比较多的一种数据库MySQL 第一步 xff1a MySQL的下载安装 到MySQL官网下载 xff0
  • GStreamer-CRITICAL **: gst_element_make_from_uri: assertion `gst_uri_is_valid (uri)' failed

    在Qt中 xff0c 使用phonon播放视频的时候 xff0c 出现了GStreamer CRITICAL gst element make from uri assertion 96 gst uri is valid uri 39 fa
  • IDEA导入JDBC驱动的jar包

    JDBC的全称是Java Database Connectivity xff0c 意思就是Java数据库链接 xff0c 是一套面向对象的应用程序接口 xff0c 指定了统一的访问各种类型数据库的标准接口 JDBC是一种底层的API xff
  • IDEA-自带Database中table进行增删改查和筛选数据

    显式的数据库有人喜欢用Navicat Premium xff0c 在里面对数据进行各种筛选和增删改查操作 xff0c 用起来很方便 这里我们说下IDEA内部自带的显式的数据库 这里我已经建好数据库和表 xff0c 表内数据我也添加了若干条
  • Flutter - Android Studio开发Flutter以及iOS真机测试

    上一节已经配置好了iOS和安卓的环境 xff0c 下面我们用Android Studio开发Flutter xff0c 当然你也可以用VSCode和ItelliJ IDEA来开发 还没配置的同学请看上一片文章 一 创建项目 接着上一节操作
  • Oracle 中ORA-28000: the account is locked解决办法

    在没有navicat xff0c 只有cmd应用程序的条件下 xff0c 在密码输入多次都出现 the account is locked用户账号被锁的问题 xff0c 请看这里 xff1a 首先 xff0c 出现ORA 28000 the
  • Linux 虚拟机设置共享文件夹不显示问题解决办法

    安装完VMware Tools后 xff0c 不要点重新启动客户机 xff0c 需要先关闭客户机 xff0c 然后再启动客户机就可以看到共享的文件
  • ROS话题通信c++和python实现

    机器人是一种高度复杂的系统性实现 xff0c 在机器人上可能集成各种传感器 雷达 摄像头 GPS 以及运动控制实现 xff0c 为了解耦合 xff0c 在ROS中每一个功能点都是一个单独的进程 xff0c 每一个进程都是独立运行的 更确切的
  • Go微服务架构实战-中篇 1. k8s架构介绍

    Go微服务架构实战 公粽号 xff1a 堆栈future 本系列文章主要是针对云原生领域微服务架构的实战 xff0c 包括网关 xff0c k8s xff0c etcd以及grpc等相关技术的应用 xff0c 同时也会把服务发现与注册 xf
  • ubuntu系统备份还原(迁移)到另外一台电脑上

    ubuntu系统备份还原 迁移 到另外一台电脑上 主要参考如下博客 xff1a https blog csdn net zeg635702733 article details 53992224 https blog csdn net qq
  • 选择嵌入式行业还是互联网行业

    本人大学的时候读的是电子信息科学与技术 xff0c 从小就特别喜欢电子产品 xff0c 经常把家里的电器这些拆来玩 xff0c 录音机 复读机都拆过 xff0c 对它们有一种莫名的喜欢 在高考那年 xff0c 填志愿的时候 xff0c 有考
  • 【直达本质】超快 STM32 系统入门指南

    计算机类的教程多 xff0c 框架和 API 用法讲的全面 xff0c 成系统的教程很多 xff0c CSDN上 知乎上很多个人学习记录和全面的成书的教程 xff0c 而且生动形象有甚至有动画讲解 xff0c 回过头来看嵌入式的教程 xff