- 博客(53)
- 资源 (4)
- 收藏
- 关注
原创 git不显示修改的内容
使用git仓库时,发现git 无法暂存、提交,也看不到修改的变化,原因是没进入APPS 下面的目录,仓库在上两级目录,无法检测到变化。
2021-03-10 19:09:09 2887
原创 拉取仓库后无法编译
我在sourcetree 把git仓库拉到了samba共享文件夹里面,在linux里面编译的时候发现无法执行,提示解析器错误,原因是换行格式不一致,建议在linux下使用git拉取仓库。
2021-03-10 16:49:52 315
原创 泰凌IDE导入代码
打开泰凌IDE的时候要选择选择工作区,这一步如果出错,后续也会报错。我的 一开始的时候默认是这样,但是我电脑没有E盘,直接OK肯定报错。所以我把E改成D 再点击OK就好了。然后选择FILE import在弹窗输入代码完整路径 点击finish即可...
2021-01-29 11:58:04 522
原创 Logon failed, use ctrl+c to cancel,source tree无法推送
source tree Logon failed写完代码,用source tree 推送到github时,弹窗输入账号密码,一直弹窗提示Logon failed。去官网登录确定了并非账号密码的问题,经了解source tree弹窗输入账号密码这一环有问题,这个登录框输入的账号密码是无效的。登录方法:工具》选项》验证》添加》如图编辑托管账户》点击刷新OAuth令牌。...
2021-01-29 10:50:03 285
原创 关于error: stray ‘\357‘ in program
今天做项目的时候遇到error: stray ‘\357’ in program 一堆报错,从报错信息可以看到是button.c的第30行有问题。但是我第29、30行删除重写了几次,依旧有问题。最后一行一行重写编译 发现是30行进入的KB_MAP_NORMAL出现了问题这里面的空格全部删除重新用英文输入法写一遍,报错就消失了。...
2021-01-11 20:04:45 2211
原创 windows10安装了新版gcc但是gcc却没有更新
win+r 输入cmd 命令窗口输入where gcc 查看是否配置环境变量。确认环境变量配置成功,如果有多个gcc,系统会默认使用前面的gcc路径,我们需要把新的gcc环境变量上移。
2021-01-03 15:01:47 1531 3
原创 BLE协议组成
协议组成图协议由 HOST 层和 CONTROLLER 层组成 应用层不属于协议层CONTROLLER 组成PHY层(Physical layer物理层)PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。LL层(Link Layer 链路层)。链路层定义了协议栈中最为基础的状态机、数据包格式、广播和连接流程等问题LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordi
2020-11-23 11:08:31 623 1
原创 BLE链路层规范
蓝牙链路控制器的作用就是执行基带协议和其他低级的链路程序。空中接口协议空中接口协议是由多址接入、设备发现、链路层链接三部分实现。低功耗蓝牙的地址低功耗蓝牙使用两种类型的地址:设备地址和随机地址。设备地址进一步划分为公有设备地址和私有设备地址。公有设备地址是设备所特有的,是不能被改变的。随机地址的作用是使低功耗蓝牙设备能够随时采用可变的随机地址来隐藏实际地址,避免低功耗蓝牙设备被追踪。1.设备地址每一个低功耗蓝牙设备都会分配一个唯一的48b低功耗蓝牙设备地址。这个地址是从IEEE注册当局获取的
2020-11-19 18:04:07 403
原创 BLE物理层规范
概述物理层协议位于协议栈最底层,主要解决空中数据收发问题。为了增强抗干扰和衰落能力,低功耗蓝牙设备还采用了跳频技术。物理层的基本特性:工作频段、调制特性、信道分配。频带和信道分配由于低功耗蓝牙系统工作在ISM频段,而根据有关法规,该频段属于工业、科学、医学等领域的工作频段,所以世界上绝大多数国家将该频段的带宽定为2400 ~ 2483.5MHz ,然而有些国家对该频段做了一-些限制。为满足这些限制,使设备能处于正常工作状态,这些国家设计了符合自身国情的各种跳频算法。没有采用这些算法的常规产品在这类
2020-11-19 17:05:25 901
原创 低功耗蓝牙系统体系结构
蓝牙4.0规范将低功耗蓝牙的硬件芯片分为两类,分别是单模(SingleMode)和双模(DualMode)。双模蓝牙就是把传统蓝牙和低功耗蓝牙集成到同-一个芯片中,它能够兼容传统蓝牙和低功耗蓝牙,具有良好的互操作性,具备现有蓝牙技术的大部分功能和射频功能。与现在的芯片相比,这样的芯片增加的费用是最少的,通常被安装在便携式计算机智能手机、平板电脑等智能电子设备上。而单模蓝牙仅仅支持低功耗蓝牙,芯片集成度很高且尺寸很小,功耗很低,为传统蓝牙功耗的10%左右。低功耗蓝牙协议栈有一个简化的链路层,提供超低功耗
2020-11-19 16:24:33 308
原创 浅谈BLE协议栈
BLE 技术是 Bluetooth SIG 规定的一套通信协议,在协议变成具体的代码之前,都只存在文档中,TI、Nordic、CSR 等厂商,根据 SIG 发布的 BLE 技术协议,配合自身的芯片开发了一整套源码,并且这套源码经过了 SIG 的测试,服务 BLE 协议。这套源码就叫做协议栈,协议栈是协议的实现 BLE协议层PHY层(Physical layer物理层)PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectiv
2020-11-19 10:23:31 1669 1
原创 linux C锁的概念
临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性锁的特性只有有限的人能占有,关键结构、数据、区域只有特定的对象能访问,为了解决并发操作的顺序不确定性。锁的种类互斥锁对于读者和写者来说。只要有一方获取了锁,另一方则不能继续获取,进而执行临界区代码自旋锁原子操作指的是在执行过程中不会被别的代码路径所中断的操作。因为这个资源非常重要,所以一直在远大转圈等这个资源,别的什么事也不干。保障了不同CPU对一段关键代码同时只能有一方占用
2020-09-16 14:14:17 819
原创 C语言基础笔记
指针基础#include "stdio.h"int main(){ int a = 123; int* str1 = a;//指针指向a int* str2 = &a;//指针指向a的地址 printf("%d\r\n",str1);//打印str1的值,这个值是一个地址 printf("%d\r\n", *str2);//打印str2指向的地址里存的值 return 0;}...
2020-09-09 09:23:40 176
原创 关于CONST关键字的一个小题
这是一道面试题#include "stdio.h"int main(){ const char *str1="123"; const char *str2="123"; if(str1==str2) { printf("=="); } else printf("\\="); return 0;}是否相等呢? 先思考一下 下面会给出答案。~~~~~~~~~~~~~~~
2020-09-08 16:57:32 152
原创 STM32多串口+printf
网上很多多串口的教程,但是效果因人而异。我现在写一篇正点原子精英板直接可以复制使用的教程,其他开发板也可参考我这种修改例程的方法。复制模板正点原子的串口实验直接复制一份,修改里面的文件即可。修改usart.h例程的头文件是#ifndef __USART_H#define __USART_H#include "stdio.h" #include "sys.h" #define USART_REC_LEN 200 //定义最大接收字节数 200#define EN_USA
2020-09-08 16:26:17 4297 2
原创 STM32卡死的问题
STM32延时delay_ms()就卡死,delay_ms(5)都不行。刚开始以为是延时的问题,经调试发现用了延时之后数组i=1之后就会卡死,我是这样定义数组的。static float PWM_Value[][3]={0};//保存三个角度 PWM_Value[i][0]=(pitch+135)*10;//保存角度 TIM_SetCompare1(TIM3,PWM_Value[i][0]);//做出动作将数组定义改为static float PWM_Value[100][3]={0}
2020-09-08 09:38:07 2380
原创 使用MPU6050控制舵机
STM32 使用MPU6050控制舵机转动为做机械臂打基础这里使用的是正点原子精英板,借助例程略作修改。部分代码如下 int main(void) { float pitch,roll,yaw; //欧拉角 short aacx,aacy,aacz; //加速度传感器原始数据 short gyrox,gyroy,gyroz; //陀螺仪原始数据 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay_init();
2020-09-07 16:03:13 5875 2
原创 C8T6最小系统板的烧录
STM32F103C8T6 USB-TTL烧录和ST-LINK烧录使用USB-TTL 烧录写好的代码直接用flymcu下载即可 rx tx 接PA9和PA10使用ST-link烧录使用ST-LINK烧录时,有很多注意事项,第一步 选择对应芯片第二步 修改对应容量...
2020-09-06 16:15:35 6266
原创 STM32F103的timer3四路PWM
正点原子精英板PWM输出略改一下STM32103定时器3输出四路PWM通过串口控制四个舵机timer.c若是没用到中断之类的 只输出PWM 定时器这样初始话就够了#include "timer.h"void TIM3_PWM_Init(u16 arr,u16 psc)//arr:自动重装值 //psc:时钟预分频数{ GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStruc
2020-09-05 21:58:40 1514
原创 STM32F103ZET6舵机测试程序(库函数)
该程序是正点原子PWM输出使用微调而来的,舵机信号线接PB5。直接复制程序把PWM例程的timer.c和main,c替换了就行舵机角度依靠PWM输出周期20MS,其中高电平占0.5-2.5ms的时基脉冲控制的。高电平0.5ms对应0度,2.5ms对应180度。通过调整PWM的占空比调整角度。话不多说,直接上例程:main.c#include "delay.h"#include "sys.h"#include "timer.h" int main(void) { u16 pwm
2020-09-02 17:18:15 4410 5
原创 C语言基础之指针练习题
分享一个关于指针的小题#include<stdio.h>void foobar(int a, int* b, int** c){int* p = &a;*p = 101;*c = b;b = p;}int main(){int a = 1;int b = 2;int c = 3;int* p = &c;foobar(a, &b, &p);printf(“a=%d, b=%d, c=%d, *p=%d\n”, a, b, c, *p)
2020-09-01 18:58:23 4821 6
原创 STM32区分接口和协议
STM32中 通信接口 和通信协议 需要区分通信接口RS232、 RS485、 通用串行总线(即USB) 都是通信接口,是一种实实在在的接口标准,不是协议。他们都是基于串口通信协议。通信协议如串口通信协议和并行通信协议嵌入式中串口通信用的很多,包括I2C,包括SPI等等。串口通信和串行通信1、串口通信和串行bai通信二者一个是一种概念,一个是一种实际的通信方式,一个主要是对SBUF的操作。2、串行通信是指一比特一比特的收发数据,相对于并行通信可一次性收发N比特而言。包括普通的串口通信,
2020-09-01 15:01:41 458
原创 C语言一些基本概念
exit和return的区别exit(0):正常运行程序并退出程序;exit(1):非正常运行导致退出程序;return():返回函数,若在主函数中,则会退出函数并返回一值。再细化一点1.return返回函数值,是关键字; exit 是一个函数。2.return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。3. return是函数的退出(返回);exit是进程的退出。4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)
2020-09-01 11:55:20 343
原创 正点STM32 远程修改时钟
如果我们代码片段设置了时钟 不可能每次修改时间都改代码.之前讲过通过ESP8266做中转站的方法 mqtt控制STM32ESP8266做中转站 我们可以利用串口或者WiFi输入指令来调用函数RTC时钟例程我的时钟代码直接用的正点原子STM32F103ZET6的例程 例程如下#include "sys.h"#include "delay.h"#include "usart.h"#include "rtc.h" _calendar_obj calendar;//时钟
2020-08-31 10:51:36 548
原创 STM32程序简单的ID加密
每一块芯片都有其独一无二的ID,并且ID存储在芯片内部。我们的代码可以通过读取芯片的ID和我们事先设定的ID值进行比较如果匹配上了才正常运行代码,从而起到加密效果,防止他人赋值程序。 STM32F103ZET6的id起始位是0x1FFFF7E8#include "id.h"// 把地址直接减去一个数是不要在程序中直接出现这个地址#define STM32_ID_D 352525 // 任意的一个数 volatile u32 STM32_ID_addr[3]={0x1FFFF7E8
2020-08-29 10:23:27 3250 6
原创 将ESP8266当作MQTT和STM32的中转站
之前讲过用串口控制ESP8266MQTT通过ESP8266控制STM32这一节 我们试着把前面两者组合起来,把ESP8266当成一个中转站不懂的可以看之前的博客,从环境配置一步一步过来的。这一节ESP8266只做一个功能 : 将STM32串口发送过来的消息 发布到MQTT将MQTT收到的消息 发送给STM32串口复制完代码记得改网关,wifi ,密码#include <ESP8266WiFi.h>#include <PubSubClient.h>#defi
2020-08-26 16:35:11 1305 3
原创 使用arduinoIDE开发ESP8266之串口控制
之前说过用ESP8266控制STM32点灯那我们可不可以实现STM32串口发送消息给ESP8266,然后ESP8266再上传到云端呢。如果能够解决这一点,那STM32测试的温度,光照等数据都可以实现上传云端了。**要实现这个想法,我们要先把ESP8266的串口控制函数完成。**首先我们让ESP8266的小灯受我们串口控制达到开灯关灯效果。代码如下:#include <ESP8266WiFi.h>String comdata = "";void Usart_ctrl();//
2020-08-26 15:48:09 3107 4
原创 STM32F103ZET6串口调节亮度的小灯
基于正点原子精英版的PWM输出实验修改只需修改三个部分的代码即可,根据之前WIFI控制小灯的教程,可以把ESP8266的代码稍作修改,就可以实现WIFI调节亮度。led.h#ifndef __LED_H#define __LED_H #include "sys.h"#include "usart.h" #include "timer.h"#include "delay.h" #include "stdio.h"//////////////////////////////////////
2020-08-25 22:55:28 1924 1
原创 C语言基础之i+++j;
如果i=1,j=2;i+++j的值是多少。#include<stdio.h>#include<math.h>int main(){ int i=1,j=2; printf("%d\n",i+++j); printf("i=%d\n",i); printf("j=%d\n",j); return 0;}该问题考察的是同一优先级下代码的执行顺序, 以及i++和++i的区别该语句从左到右执行,i++ +j; 运行完此句后 i
2020-08-25 22:26:31 7409 3
原创 利用MQTT控制STM32的小灯
之前我们通过MQTTX控制ESP8266开关灯ESP8266阿里云开关灯这一节我们用MQTT控制STM32的小灯。 原理 :ESP8266接收到MQTT消息后,利用串口发送给STM32STM32的代码就是串口控制代码,只不过在这个转口几经周折,从阿里云服务器到MQTT到ESP8266再到STM32的串口代码分为两个部分,中转站ESP8266,最终处理STM32ESP8266部分代码: 记得改WIFI 和服务器#include <ESP8266WiFi.h>#inclu
2020-08-24 22:40:20 3243 6
原创 通过MQTTX控制ESP8266开关灯
之前讲过 win10安装arduino阿里云搭建EMQ服务器使用MQTTX软件 如果不清楚的按上面顺序学习,大约半小时即可。1.<PubSubClient.h>库的安装因为用arduino开发 ESP8266 ,连接阿里云的emqx服务器,就要有一个mqtt相关的库。之前在 win10安装arduino已经把<PubSubClient.h>库放入了,但是arduino并不能识别,我们要手动安装一下。 工具 》》 管理库 搜索框中输入PubSubClie
2020-08-24 20:09:29 3318 2
原创 使用MQTT软件连接EMQ
上一节我们已经在阿里云服务器成功搭建EMQ现在我们来学会如何使用它。下载MQTTX软件链接:https://pan.baidu.com/s/18eO9_z-Hn73oucdoAfAA8Q 提取码:sbuv解压完后双击exe文件直接安装 打开这个软件添加客户端箭头处输入你的服务器公网ID,其他地方随意, 然后点左上角connect 。注意 :服务器必须打开端口1883.订阅话题点击箭头处订阅一个话题 。输入话题名称然后确定。推送消息我这里新建了两个客户端一个客户端订阅
2020-08-24 00:32:44 3397 3
原创 阿里云Ubuntu16.04搭建EMQ
之前我们讲过Windows 使用SSH链接阿里云服务器win10通过SSH连接阿里云服务器这一节我们在服务器搭建EMQ阿里云服务器搭建EMQ首先 SSH连接服务器ssh root@47.93.117.91输入密码之后成功进入如有不懂的请看上一节win10通过SSH连接阿里云服务器先下载解压软件因为待会要解压安装包 sudo apt-get install unzip下载安装包wget https://www.emqx.io/downloads/broker/v4.0.6/emqx
2020-08-23 21:03:28 792
原创 小白向ESP8266(arduino)之点灯
之前我们已经安装完了arduinoIDE,这一节使用arduino开发ESP8266这里我使用的是这种全IO口引出的板子,连上数据线就可以直接下载。1.用USB线连接好电脑和ESP8266模块2.打开arduino,工具》开发板》NodeMCU 1.03.选择 文件》示例》Blink4.检查端口工具》端口如果呈灰色 就调整一下设备 或者重启一下arduino多试几次,检查一下设备管理器要能看见端口,不然无法下载。5.烧录程序一切准备就绪后 直接点击左上角烧录即可这个程序是
2020-08-23 19:07:54 3509
原创 小白向ESP8266的开发环境搭建(arduino)
主要还是学STM32,esp8266玩玩而已,所以直接用arduino 比较方便。本文手把手教你配置arduino开发环境,非常简单,面向0基础。配置arduinoIDE下载链接:下载并解压后1.双击exe文件,安装arduino安装步骤都可以默认,安装路径随意。2.解压Arduino15.zip3.打开配置路径1.打开软件注意:刚安装完桌面可能没有快捷方式,你要在安装目录中找到exe文件双击打开2.进入首选项打开后如下图,点击文件,首选项。3.进入配置路径点击进入后有
2020-08-23 17:58:48 3078 1
原创 linux基本概念之中断、轮询
用通俗易懂的语言来阐述一些基本概念,不涉及代码,小白也能看得懂。中断是什么意思就是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。中断是一种计算机术语。通俗点说就是停下当前的执行程序转而执行新的程序。 执行完后再返回执行之前的程序。为什么要有中断因为外围设备和CPU处理速度不对等。就好比电脑的处理速度和你键盘打字的输入速度,电脑处理速度非常快,如果一直等待你输入,那样非常浪费资源。更通俗的说,老板说明
2020-08-22 15:17:29 1642 2
原创 C语言基础之输出首次出现字符
从键盘输入一串字符,首次出现的字符输出三遍。例如输入 ABCAA 输出AAABBBCCC#include <stdio.h>#define SIZE 100 char a[SIZE]; //用来保存没重复 void reverseSentence(); int main(){ int s=0; printf("please input: "); reverseSentence(); printf("\n"); for(s=0;s&
2020-08-21 23:45:46 946
原创 linux下多线程编程入门(三)
前面两节粗略学习了一下多线程编程,这一节我们来了解一下锁的概念。由于多线程之间是并发执行的,而系统调度又是随机的,因此在写多线程程序时会出现很多问题,这时就免不了要用到各种锁机制来保证线程安全且按我们的意愿正确执行。多线程可能出现的问题当多个线程同时读写同一块代码区的时候,就出现很多问题。比如初始i=0;我们希望线程1和线程2各执行一次i++;理想结果是i=2;但是线程1执行 i++; 此时应该 i=1;但是线程2正好同时读取到了i=0;自加后i=1;然后把i=1复制给i。这不是我们希望看到
2020-08-21 20:04:52 162
C8T6核心板NRF.rar
2020-09-11
STM32多串口共用printf.rar
2020-09-08
方总练字2.6.zip
2020-07-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人