stm32使用串口进行通讯之发送数据

2023-05-16

前提准备:

1.库函数基础模板
2.stlink下载器、USB-TTL下载器、单片机最小开发板stm32F103C8T6
3.面包板及相关接线
4.vscode与keil的联合开发更流畅
5.串口软件,这个下面视频有

本文基于 哔哩哔哩 江科大自化协STM32入门教学
知识讲的非常详细,非常感谢作者的无私奉献,本文主要是基于此进行试验笔记。便于以后查找。

1.在库函数模板的前提下,在工程文件下新建文件夹Hardware,然后在keil中将文件目录加一下,Hardware文件下的文件也可以在keil下添加,添加时注意文件目录。保存关闭keil,打开VScode显示以下文件说明添加成功。具体步骤就不详细说明了,写过LED灯的应该都有了解。
在这里插入图片描述
2.在Hardware中添加文件夹Serial.c用来配置串口发送数据函数
首先是配置GPIO时钟以及USART时钟

void Serial_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;                  //定义USART结构体
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);   //开启时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出   USART1 TX使用
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9;   
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);                   

    USART_InitStructure.USART_BaudRate = 9600;              //设置波特率9600,init函数内部会自动算好9600对应的分频系数
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流控制,不启用
    USART_InitStructure.USART_Mode = USART_Mode_Tx;         //USART模式:发送数据
    USART_InitStructure.USART_Parity = USART_Parity_No;     //校验位:无校验
    USART_InitStructure.USART_StopBits = USART_StopBits_1;  //停止位1   
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;    //字长,这里不需要校验,字长选择8位
    USART_Init(USART1,&USART_InitStructure);                //初始化USART

    USART_Cmd(USART1,ENABLE);    
}

3.发送数据(以字节发送)

void Serial_SendByte(u8 Byte)
{
    /*内部将Byte传递给Data变量,之后Data&01FF,把无关的高位清零,
    然后直接赋值给DR寄存器,通向TDR发送数据寄存器,再传递到移位寄存器最后一位一位传递给TX引脚*/
    USART_SendData(USART1,Byte);    //调用串口的SendDate()函数
    /*写完数据,需要等待,等TDR的数据到移位寄存器,不然数据还在TDR进行等待,再写入数据会产生覆盖
        所以发送之后,需要等待标志位
        USART_FLAG_TXE 发送数据寄存器为空 标志位,要等待TXE为1,这里要嵌套循环
        如果TXE为RESET就一直循环,直到TXE为SET
    */
   while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
   /*关于标志位是否需要手动清楚的问题:标志位置1之后,不需要手动清0。因为对USART_DR进行写操作,将该位清0*/
}

主函数中

int main(void)
{
    Serial_Init();
    Serial_SendByte(0x41);      //向串口写入数据
}

4.发送数组

/*
    发送数组,通过串口发送到电脑
    参数1:指针指向传递数组的首地址 
    参数2:长度
*/
void Serial_SendArray(u8 *Array,u16 Length)
{
    u16 i;
    for ( i = 0; i < Length; i++)
    {
        Serial_SendByte(Array[i]);
    }
}

主函数

u8 My_Array[] = {0x11,0x22,0x33,0x44};

int main(void)
{
    Serial_Init();
    Serial_SendArray(My_Array,4);   //向串口写入数组
}

5.发送字符串

/*
    发送字符串函数
    字符串自带一个结束标志位,不需要再传递长度参数,对应空字符,是字符串的标志位
*/
void Serial_SendString(char *String)
{
    u8 i;
    for(i=0; String[i]!='\0'; i++)
    {
        Serial_SendByte(String[i]);     //发送字符串
    }
}

主函数

int main(void)
{
    Serial_Init();
    Serial_SendString("Hello,world!\r\n");  //发送字符串 \r\n表示换行
}

6.发送数字

/*
    次方函数,提取千百十个
*/
u32 Serial_Pow(u32 X,u32 Y)        //2 3
{
    u32 Result = 1;
    while(Y--)                     //3--
    {
        Result *= X;               //1*2 *2 *2 = 2^3
    }
    return Result;
}

/*
    发送一个数字
*/
void Serial_SendNumber(u32 Number,u8 Length)
{
    u8 i;
    for ( i = 0; i < Length; i++)
    {
        /*
           (Number / Serial_Pow(10,i) % 10)     1234/1%10=4   1234/10%10=3 1234/100%10=2
           第一个数据不是个位,需要反过来 (Number / Serial_Pow(10, Length - i -1) % 10)
           目前循环,参数会以十进制从高位到低位依次发送,因为最终要以字符的形式显示,所以这里要加一个偏移
        */
        Serial_SendByte((Number / Serial_Pow(10,Length - i - 1) % 10) + '0');    
    }
    
}

主函数

int main(void)
{
    Serial_Init();
    Serial_SendNumber(1234567890,10);   //发送数字
}

7.重定向prinf发送数据,这个需要**include<stdio.h>**别忘了

/*
    printf函数默认是输出到屏幕,单片机没有屏幕,需要重定向printf函数
    fputc是printf函数的底层,printf打印时,不断调用fputc函数一个一个打印
*/
int fputc(int ch,FILE *f)
{
    Serial_SendByte(ch);
    return ch;
}

主函数

int main(void)
{
    Serial_Init();
    printf("Number=%d\r\n",666);    //使用重定向的printf函数发送
}

8.在7的基础上使用非封装sprintf函数
主函数

char String[100];
int main(void)
{
    Serial_Init();
    /*printf只能有一个,重定向到串口1使用,串口2再用就没有了
    多个串口想用printf,可以使用sprintf,sprintf可以把格式化字符输出到每一个字符串里*/
    sprintf(String,"Number=%d\r\n",666);
    printf(String);
}

9.使用封装sprinf函数,别忘了include<stdarg.h>

/*
    封装sprintf,参数1接收格式化字符串,...用来接收后面的可变参数列表
*/
void Serial_Printf(char *format,...)
{
    char String[100];
    va_list arg;    //参数列表变量
    va_start(arg,format);   //从format位置开始接收参数表,放在arg里面
    vsprintf(String,format,arg); //打印位置String,格式化字符串是format,参数表是arg
    va_end(arg);    //释放参数表
    Serial_SendString(String);
}

主函数

int main(void)
{
    Serial_Init();
    //上面每次都需要3步调用,所以对sprintf进行封装
    Serial_Printf("真的%d\r\n",666);
}

总的代码

Serial.c

#include "Serial.h"

void Serial_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;                  //定义USART结构体
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);   //开启时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出   USART1 TX使用
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9;   
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);                   

    USART_InitStructure.USART_BaudRate = 9600;              //设置波特率9600,init函数内部会自动算好9600对应的分频系数
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流控制,不启用
    USART_InitStructure.USART_Mode = USART_Mode_Tx;         //USART模式:发送数据
    USART_InitStructure.USART_Parity = USART_Parity_No;     //校验位:无校验
    USART_InitStructure.USART_StopBits = USART_StopBits_1;  //停止位1   
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;    //字长,这里不需要校验,字长选择8位
    USART_Init(USART1,&USART_InitStructure);                //初始化USART

    USART_Cmd(USART1,ENABLE);    
}

/*
    函数功能:发送数据
*/
void Serial_SendByte(u8 Byte)
{
    /*内部将Byte传递给Data变量,之后Data&01FF,把无关的高位清零,
    然后直接赋值给DR寄存器,通向TDR发送数据寄存器,再传递到移位寄存器最后一位一位传递给TX引脚*/
    USART_SendData(USART1,Byte);    //调用串口的SendDate()函数
    /*写完数据,需要等待,等TDR的数据到移位寄存器,不然数据还在TDR进行等待,再写入数据会产生覆盖
        所以发送之后,需要等待标志位
        USART_FLAG_TXE 发送数据寄存器为空 标志位,要等待TXE为1,这里要嵌套循环
        如果TXE为RESET就一直循环,直到TXE为SET
    */
   while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
   /*关于标志位是否需要手动清楚的问题:标志位置1之后,不需要手动清0。因为对USART_DR进行写操作,将该位清0*/
}

/*
    发送数组,通过串口发送到电脑
    参数1:指针指向传递数组的首地址 
    参数2:长度
*/
void Serial_SendArray(u8 *Array,u16 Length)
{
    u16 i;
    for ( i = 0; i < Length; i++)
    {
        Serial_SendByte(Array[i]);
    }
}

/*
    发送字符串函数
    字符串自带一个结束标志位,不需要再传递长度参数,对应空字符,是字符串的标志位
*/
void Serial_SendString(char *String)
{
    u8 i;
    for(i=0; String[i]!='\0'; i++)
    {
        Serial_SendByte(String[i]);     //发送字符串
    }
}

/*
    次方函数,提取千百十个
*/
u32 Serial_Pow(u32 X,u32 Y)        //2 3
{
    u32 Result = 1;
    while(Y--)                     //3--
    {
        Result *= X;               //1*2 *2 *2 = 2^3
    }
    return Result;
}

/*
    发送一个数字
*/
void Serial_SendNumber(u32 Number,u8 Length)
{
    u8 i;
    for ( i = 0; i < Length; i++)
    {
        /*
           (Number / Serial_Pow(10,i) % 10)     1234/1%10=4   1234/10%10=3 1234/100%10=2
           第一个数据不是个位,需要反过来 (Number / Serial_Pow(10, Length - i -1) % 10)
           目前循环,参数会以十进制从高位到低位依次发送,因为最终要以字符的形式显示,所以这里要加一个偏移
        */
        Serial_SendByte((Number / Serial_Pow(10,Length - i - 1) % 10) + '0');    
    }
    
}

/*
    printf函数默认是输出到屏幕,单片机没有屏幕,需要重定向printf函数
    fputc是printf函数的底层,printf打印时,不断调用fputc函数一个一个打印
*/
int fputc(int ch,FILE *f)
{
    Serial_SendByte(ch);
    return ch;
}

/*
    封装sprintf,参数1接收格式化字符串,...用来接收后面的可变参数列表
*/
void Serial_Printf(char *format,...)
{
    char String[100];
    va_list arg;    //参数列表变量
    va_start(arg,format);   //从format位置开始接收参数表,放在arg里面
    vsprintf(String,format,arg); //打印位置String,格式化字符串是format,参数表是arg
    va_end(arg);    //释放参数表
    Serial_SendString(String);
}

Serial.h

#ifndef __SERIAL_H
#define __SERIAL_H

#include "stm32f10x.h"
#include <stdio.h>
#include <stdarg.h>

void Serial_Init(void);
void Serial_SendByte(u8 Byte);
void Serial_SendArray(u8 *Array,u16 Length);
void Serial_SendString(char *String);
void Serial_SendNumber(u32 Number,u8 Length);
void Serial_Printf(char *format,...);

#endif

main.c

#include "stm32f10x.h"   // Device header
#include "Serial.h"

u8 My_Array[] = {0x11,0x22,0x33,0x44};
char String[100];

int main(void)
{
    Serial_Init();
    Serial_SendByte(0x41);      //向串口写入数据
    Serial_SendArray(My_Array,4);   //向串口写入数组
    Serial_SendString("Hello,world!\r\n");  //发送字符串 \r\n表示换行
    Serial_SendNumber(1234567890,10);   //发送数字
    printf("Number=%d\r\n",666);    //使用重定向的printf函数发送

    /*printf只能有一个,重定向到串口1使用,串口2再用就没有了
    多个串口想用printf,可以使用sprintf,sprintf可以把格式化字符输出到每一个字符串里*/
    sprintf(String,"Number=%d\r\n",666);
    printf(String);

    //上面每次都需要3步调用,所以对sprintf进行封装
    Serial_Printf("真的%d\r\n",666);


}

试验硬件接图

暂未用到屏幕,可不接
在这里插入图片描述

实验效果

按复位键,电脑串口接收到数据
在这里插入图片描述

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

stm32使用串口进行通讯之发送数据 的相关文章

  • GCC - 如何停止链接 malloc?

    我正在努力将我的代码缩减到最小的骨架大小 我使用的是只有 32k 闪存的 STM32F0 需要很大一部分闪存用于数据存储 我的代码已经有大约 20k 闪存大小 其中一些是由于使用了 STM32 HAL 函数 我可以在以后需要时对其进行解释和
  • 如何让printf在STM32F103上工作?

    我是 STM32F103 世界的新手 我有一个STM32F103的演示代码 我正在使用arm none eabi来编译它 我尝试了在谷歌上可以找到的内容 但到目前为止没有任何效果 我已经花了三天时间来解决这个问题 任何人都可以给我一个运行良
  • 134-基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真+源程序...

    资料编号 134 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 ds1302时钟 DHT11温湿度 电机 蜂鸣器 制作一个基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真 2 通过DH
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • STM32F103

    提示 来源正点原子 参考STM32F103 战舰开发指南V1 3PDF资料 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 开发环境硬件普中科技 接线图在g
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 擦除后无法写入闪存

    所以我不能在擦除后直接写入内部闪存 如果写操作之前没有擦除操作 那么我可以 有什么想法吗 编程函数返回 成功写入 值 但查看内存时 没有写入任何数据 这是代码 uint32 t pageAddress 0x08008000 uint16 t
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公

随机推荐

  • RT-Thread学习入门之RT-Thread Studio的使用

    本科生因做比赛需要 xff0c 使用RT Thread Studio进行stm32f407ZGT6的程序开发 xff0c 文章仅以用来记录过程 系列文章目录 第一篇 RT Thread学习入门之RT Thread Studio的使用 第二篇
  • 【CSDN三周年纪念日】我的创作纪念日

    2019年09 月 17 日 xff0c 一个看似平凡的一天 在这么平凡的一天里 xff0c 我发表了第一篇博客 在这平凡的一天 xff0c 赋予了它不平凡的意义 也许是立志成为一名专业 IT 作者 也许是记录一段刚实践的经验 但在那一刻
  • 自定义串口通讯协议

    通信协议 1 读操作 主机发送设备地址0x0A 读命令字 数据长度 xff08 数据长度不包括CRC xff09 xff0c 当主机接收完数据和CRC后 xff0c 需要进行数据校验 xff0c 并和从机返回的CRC进行对比 数据校验方式为
  • MySql批量插入指定位数的随机数

    需求 xff1a 向mysql中批量插入指定位数的随机数 sql脚本 xff1a 第一步 xff1a 创建一个函数用于生成指定位数的随机数 span class token comment 创建一个函数用于生成随机字符串 span span
  • 路由器不开机——维修更换MT7621AT CPU

    故障类别 xff1a 不开机 故障现象 xff1a 210mA横流不开机 故障描述 xff1a 发现CPU异常发烫不开机 xff0c 其它地方未有发热现象 附件 xff1a 原因分析 xff1a 开机测量各路电压 xff0c 发现均有电压
  • 路由器5G WiFi不工作维修分析

    故障类别 xff1a WiFi异常 故障现象 xff1a WiFi指示灯不亮 故障描述 xff1a 开机正常 xff0c 但是5G WiFi不工作指示灯不亮 xff0c 2 4G工作正常 xff0c 其他工作正常 附件 xff1a 原因分析
  • Ubuntu18.04安装ROS Melodic(详细,亲测安装完成,有清晰的截图步骤)

    这也是我在Ubuntu里面安装ROS的第N次 xff0c 以前每次安装过程都忘记总结了 xff0c 导致每次安装ROS都浪费了很多的时间用来解决各种问题 为了避免自己以后出现问题需要再安装 xff0c 所以写这篇博客总结一下 xff0c 这
  • 04Git从入门到入土之码云的使用及代码迁移

    1 国内代码托管中心 码云 众所周知 xff0c GitHub 服务器在国外 xff0c 使用 GitHub 作为项目托管网站 xff0c 如果网速不好的话 xff0c 严重影响使用体验 xff0c 甚至会出现登录不上的情况 针对这个情况
  • 操作系统部分习题

    操作系统部分题目 第一章 操作系统引论第二章 进程的描述与控制第三章 处理机调度与死锁第四章 存储器管理第五章 虚拟存储器第六章 输入输出系统第七章 文件管理第八章 磁盘处理器的管理 习题书籍 xff1a 计算机操作系统 xff08 第四版
  • 基于自适应反步法的三自由度直升机(3 DOF Helicopter)轨迹跟踪

    文章目录 前言一 3 DOF Helicopter实验装置二 3 DOF Helicopter模型建立及简化2 1模型建立2 1 1 俯仰轴建模2 1 2 横侧轴建模2 1 3 旋转轴建模 2 2 模型简化 三 控制器设计四 实验验证4 1
  • rabbitmq安装(rpm方式)

    rabbitmq 1 准备资料2 安装3 常用操作命令 1 准备资料 1 erlang 23 0 2 1 el7 x86 64 2 rabbitmq server 3 8 4 1 el7 noarch 3 centos7 RabbitMQ的
  • Docker入门教程

    目录 一 Docker介绍 为什么需要沙箱机制 xff1f 什么是沙箱机制 xff1f 二 Docker的优点 三 安装Docker 四 Docker的组成 问题 xff1a 是否不理解容器与镜像 xff1f 五 启动Docker 六 安装
  • ubuntu下录屏软件kazam及使用问题

    Ubuntu下视频录制工具kazam及问题 视频录制工具 在Ubuntu或linux下录制视频应该是每个用linux的朋友都会用到的 xff0c 这里笔者使用了Kazam 功能挺多的 xff0c 包括截屏 xff08 虽然ubuntu有自带
  • NUC安装Ubuntu18.04系统

    NUC安装Ubuntu18 04系统 基本信息前言安装过程配置Ubuntu18 04系统镜像安装系统解决系统字体过大 分辨率低的问题测试 其他软件安装 基本信息 Time xff1a 2021 3 9使用NUC版本 xff1a 猎豹峡谷NU
  • 11代i5 NUC使用记录

    11代i5 NUC使用记录 NUC信息NUC选型配置过程内存条固态安装安装windows安装Ubuntu18 04使用ROS2GO 其他学习总结 NUC信息 NUC基本信息 xff1a NUC xff1a Next Unit of Comp
  • ROS rosdep initupdate报错解决方法

    ROS rosdep init update报错解决方法 在安装ROS的过程中 xff0c 很多同学在执行上述指令时会提示以下错误 xff1a ERROR cannot download default sources list from
  • Ubuntu18.04下使用D435i跑ROS包和ORB-SLAM2

    Ubuntu18 04下使用D435i跑ROS包和ORB SLAM2相关问题 前言主要问题及解决方法汇总一 realsense包版本问题二 无法定位安装包问题三 警告问题四 如何检测是否发布五 利用D435i跑ORB SLAM2一点注意 后
  • 小觅双目sdk地址

    https mynt eye d sdk readthedocs io zh CN latest sdk install ubuntu src html
  • FreeRTOS移植STM32F4

    64 TOC FreeRTOS FreeRTOS移植到STM32F4上 本文章讲解一下如何将FreeRTOS移植到STM32F4开发板上 xff0c 如有不对之处 xff0c 欢迎指正 xff0c 多多交流 一 创建工程文件及代码调试 我们
  • stm32使用串口进行通讯之发送数据

    前提准备 xff1a 1 库函数基础模板 2 stlink下载器 USB TTL下载器 单片机最小开发板stm32F103C8T6 3 面包板及相关接线 4 vscode与keil的联合开发更流畅 5 串口软件 xff0c 这个下面视频有