- 博客(102)
- 收藏
- 关注
原创 ESP32 操作AT24C32或AT24C64
容量有两个型号AT24C32/64 提供32,768/65,536 bits ,也就是4096字节(4k字节)或8192字节(8K字节)Flash 在写入前,需要擦除,且擦除是按照page进行的。比如spi flash。设备地址,如果引脚A0~A2都接地,则IIC地址为0x50.EEPROM在写入前不需要擦除page,直接写入就行。使用16bit来确定存储的地址。有引脚可以配置IIC的地址。电压2.7V-5.5V。每个page 32字节。
2024-01-28 10:32:56 537
原创 ESP32操作DS18B20
供电电压3-5.5V待机电流750nA,活动电流1mA一线通信方式,信号引脚为开漏结构硬件供电方式有两种接法。常规供电或总线总线。
2024-01-26 15:20:25 1015
原创 esp32 操作DS1307时钟芯片
有VCC供电,IIC活动状态是1.5mA,待机状态200μA,电池电流5nA(MAX=50nA)无VCC供电的时候,电池电流,300nA(时钟运行),10nA(时钟停止)供电电压是4.5-5.5V,不支持3.3VIIC频率最大400kHZ。
2024-01-26 11:25:47 1077
原创 NRF52832 SAADC 多通道双缓冲的理解
为了实现ADC采样速度更快,可以使用双缓冲功能。先说下SAADC的工作模式一、SAADC的工作模式根据规格书SAADC共有4中工作模式:one shot、Continuous mode、Oversampling、Scan mode。one shot:一次触发,只运行单个通道,采样一次。Continous mode:持续触发模式,本质是通过timer定时去不断的one shot。Oversampling:过采样,是为了提高信噪比,增加数据的准确性。缺点是采样速度变慢,数据变的平滑。Scan mod
2021-11-16 11:31:01 2104
原创 N76E003 串口ISP如何使用
1.所需硬件, N76E003开发板,USB2TTL串口线,NU-LI烧录器2.所需软件。官网ISP源码。对应的工程是如图所示工程。https://github.com/OpenNuvoton/N76E003-BSP3.和普通的工程一样,使用NU-LINK将工程烧录进IC就行。4.将串口线连接到UART0接口。P0.6和P0.75.打开ISP程序。如下1.选择UART,2.选择对应串口号,3.选择APROM。4.选择dataflash(如果没有设计这部分就不选)5.设置setting(注意根据情
2021-04-30 15:52:50 1003 1
原创 N76E003使用DATAFLASH调试技巧总结
使用内置的FLASH做DATAFLASH是经常做的事情。1.N76E003的page是128字节。因此每次擦写都是128字节2.写入前需要先擦除,否则写入的数据会出问题。3.烧录程序的时候。需要看是全片擦除还是部分擦除,还是不擦出。全片擦除会把写进去的数据擦除掉。4.有建议说从末尾倒着写dataflash。目的是防止覆盖了代码。看需求把。感觉做好空间规划就行。倒着写不太符合思维。5.可以用debug的memory窗口查看到flash的数据,如图6....
2021-04-30 10:50:49 1154
原创 N76E003 串口的时候用和printf初始设置
N76E003的共两个串口。每个串口有多种工作模式。具体可以看规格书以及BSP包例程。为方便日后使用。做简要的总结。1.初始化开发中。常用的是串口模式1.其初始化代码如下:因为串口的发送需要用到定时器(产生波特率需要用到)。UART0可选择有TIMER1和timer3。UART1只有TIMER3UART0void InitialUART0_Timer1(UINT32 u32Baudrate); //T1M = 1, SMOD = 1void InitialUART0_Timer3(UINT3
2021-04-29 11:21:52 881
原创 新唐M0内核。接口的TTL电平和斯密特电平的使用
TTL电平在默认情况下。接口是TTL电平的。其高低电平的阈值如下举个例子。当电源电压为3.3V的时候。IO口电压为1V是。MCU就认为是低电平。当为1.08V是,IO口就认为是高电平。连个阈值的宽度只有0.08V。非常小。、斯密特电平有些项目需要把阈值拉宽,防止误触发和抖动。可以使用斯密特电平来实现。举例。斯密特触发下。如在3.3V供电的情况。低于0.99V为低电平。高于2.31V为高电平。这里有个很重要的。规格书只是给出了最大值和最小值,没有给典型值。我实测是高于2.8V为高电平。 低于
2021-04-25 10:29:07 747
原创 NRF52 SAADC操作和对输入电压的要求
NRF52 内部的AD是逐次逼近型,差分输入AD。其主要特性记录如下:1.单端模式下的话。反向端N就会接地。2.输入电压不能低于0V。当小幅度低于0V的时候,会产生一个负数的输出。3.输入电压不能超过3.6V。超过之后,就会被内部的电路钳制。导致测量数据出错。4.AD带接口电阻(RESP或RESN)。但是没有看到电阻的阻值。只看到可以上拉,可以下拉。一般都是选择不使用。5.AD带有增益选择GAIN。这个增益是为了测量准确性。当测量信号小(如小于1V)时。可以使用高增益来实现测量。当测量信号比较
2021-04-23 17:40:24 612
原创 新唐M0 内核 FLASH操作认识和总结
本文不对代码做详细解析。先说结论,和常见问题结论结论1:FLASH在操作的时候,需要先“擦除”。然后在“写入”。结论2:擦除需要一整块擦除。不能只擦除某几个字节。结论3:写入是可以按照字节这样写入的。但是“结论1”的存在。导致写入也整片写入。否则数据就会丢失。结论4:写入可以写0 。不能写1.如果要写1.必须先“擦除”。问题:如果不按照如上结论来做。会怎样呢?分析如下。============================ 验证1=============================
2021-04-23 15:03:56 1369 1
原创 python 用字典实现类似switch的命令行功能选择
python没有switch关键字。所以如果想实现类似下面的C++代码。可以使用多重if-else实现。这里提供一个用字典实现的方法。1.构建一个字典。前面key的数字代表用户输入的功能序号。后面的value代表对应的功能函数。这些函数就是一个普通函数根据业务需求另外实现。不做具体展开 self.choices = { "1": self.generate_hex, "2": self.generate_OTA_file,
2021-04-16 17:34:48 439
原创 NRF52832 开启看门狗
配置SDK.CONFIG,如下两个需要使能。添加库文件初始化 //Configure WDT. nrf_drv_wdt_config_t config = NRF_DRV_WDT_DEAFULT_CONFIG; err_code = nrf_drv_wdt_init(&config, wdt_event_handler); APP_ERROR_CHECK(err_code); err_code = nrf_drv_wdt_channel_alloc(
2021-04-13 15:33:29 315
原创 NRF52832 错误代码8198的处理
在开发过程中,发生如下错误提示。<error> app: ERROR 8198 [Unknown error code] at F:\project\my-test-embedded\tools\uart_ble_nRF5_SDK_15.2.0_9412b96\examples\ble_peripheral\ble_app_uart\main.c:329PC at: 0x0002E957通过查看代码,发现是进入sleep的时候,发生了错误。此错误的原因是。正在debug的过程中。1.因
2021-04-13 12:25:04 3000 2
原创 NRF52832添加UUID后,提示NRF_ERROR_NO_MEM
通过DEBUG跟踪后,发现是调用函数err_code = sd_ble_uuid_vs_add(&base_uuid, &p_led->uuid_type);是发生错误。提示sd_ble_uuid_vs_add是softdevice的函数。通过查阅资料。发现是sdk_config.h没有相应增加宏NRF_SDH_BLE_VS_UUID_COUNT的数量。导致错误参考资料https://devzone.nordicsemi.com/f/nordic-q-a/36218/sd_
2021-04-08 18:03:46 615
原创 NRF52832 BLE手机控制LED灯亮灭
手机APP使用到的是NORDIC官网下载的nRF ConnectBLE通信的载体都是通过数据文件或属性文件来实现。也就是profile。他们的层级关系是这样的在BLE协议栈里面可以定义很多的profile。定义很多的server,每个server也可以定义很多的characteristic。--------------------------------------------------分割线-----------------------------------------例程解析main函数
2021-04-08 16:52:52 727
原创 NRF52832串口的使用
在开发nrf52832主要遇到如下问题。但仍然有printf重定向问题未解决。因不影响项目使用。先把过程记录下来。方便日后翻阅。NRF52832的串口有一个例程:nRF5_SDK_15.2.0_9412b96\examples\peripheral\uart\pca10040\blank\ses串口有普通的uart和使用TE的uart。TE就是TASK and event。是IC内部的一个工作机制。将事件和任务关联起来。目的是快速响应。两种串口使用的初始化函数不同。如下是例程的串口初始化代码
2021-04-07 10:49:04 2203
原创 NRF52832 ADC的采样触发和采样速度的分析
如何使用ADC 能找到一些例程。但是ADC是怎么控制采样速度的。有两种AD的采样模式:阻塞(blocking mode)和非阻塞(no-blocking mode)阻塞模式:调用函数:nrf_drv_saadc_sample_convert完成采样。采样完成后return采样值。非阻塞模式:此模式触发方式有两种CPU显式触发或使用PPI。1.CPU显式调用函数nrf_drv_saadc_sample实现触发。触发后会调用ADC初始化时写入的回调函数。2.使用PPI,调用函数nrf_drv_sa
2021-04-06 15:39:00 2454
原创 nrf52832-SDK 外设例程如何打开RTT调试输出
1.设置编译输出为DEBUG。2.需要配置SDK_CONFIG.h才能设置NRF_LOG_BACKEND_RTT_ENABLED宏为1其初始化代码如下: uint32_t err_code = NRF_LOG_INIT(NULL); NRF_LOG_DEFAULT_BACKENDS_INIT();//输出错误log信息的函数NRF_LOG_ERROR("SAADC HAL simple example started.");...
2021-04-06 14:02:33 442
原创 NRF52832 SDK timer函数编译报错的问题总结及对SDK宏套路的理解
在使用nordic官方SDK的时候,尝尝会看到nrf_xxxx和nrfx_xxx这样的函数开头或文件名开头。其区别是nrfx开头的是对以前代码的扩展或升级。这就有个问题。新软件对就软件的兼容性问题。为了解决这个问题。NORDIC的官方SDK的宏定义系统做的非常复杂。 初次看,很让人一头雾水。为了方便日后查看。对这两天的摸索做一个总结。我的SDK版本是15.2。通过研究发现,不同版本,变动还挺大。所以可以仔细研究下。宏定义主要在如下两个文件中1.sdk_config.h :新的SDK配置,基本都
2021-04-02 11:00:38 472
原创 新唐帶隙電壓(Band-gap)的初学者疑问
Q:为什么要读取Band-gap电压。A:因为想提高AD的精度。Q:既然芯片UID都能读取Band-gap电压值了,为什么还要用AD去读取。A:因为要反推出VDDQ:VDD是干什么的?和AD的关系是?A:VDD是给IC供电的,同时为AD提供参考电压。参考电压的大小,会影响AD的输出值。研究下AD的原理,就知道这个参考电压会影响AD输出值。Q:VDD不是固定是5V或3.3V吗,直接用不就行了?A:因为新唐的IC工作电压范围很宽,且VDD不一定要这几个典型值。所以为了保证AD的精度。需要去反推VD
2021-02-23 17:46:41 1682
原创 新唐MCU资料的寻找方法
刚接触新唐这个品牌的MCU。感觉这个IC的官网资料挺乱的。资料的管理不太友好。研究一段时间后。把一些寻找资料的主线记下来。内容不追求大而全。只记录主线。相信随着时间推移。官网的资料会整理越来越清晰。1.分清自己IC的内核。比如8051,M0,M4等等好几个。2.找到IC对应的系列。有很多系列。如果不清楚是哪个。就一个一个点开看看。另外有一份选型手册可以研究下。可以大概滤清脉络。选型手册名叫:Nuvoton-MCU-PSG-SC-2021.pdf3.进入芯片页面,可以下载对应的工具和软件。4.我认为最
2021-02-18 08:35:45 729
原创 MobaXterm报错:MobaXterm X11 proxy: Unsupported authorisation protocol
可以使用mobaXterm 图形化界面打开某些程序,这个功能很好用,但是有可能因为配置文件不存在导致开启失败,如下所示,打开gedit报错。解决方法有两个:方法一:使用root账户登录一次。mobaXterm 就会自动在用户目录下创建.Xauthority文件方法二:cp /xxx/.Xauthority /home/root/.XauthorityXXX为你当前的用户名。...
2021-01-08 14:25:09 13016 4
原创 armbian源码解析
编译系统从compile.sh开始,所以从这个地方开始1.判断代码路径是否合法,主要是判断是否包含空格。SRC="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"# check for whitespace in ${SRC} and exit for safety reasonsgrep -q "[[:space:]]" <<<"${SRC}" && { echo "\"${SRC}\" contains whitesp
2020-09-09 14:28:22 1260
原创 VMWARE虚拟机更新Ubuntu卡在登陆界面的问题解决
昨天在搭建开发环境的时候,需要安装一些图形包和升级系统的组件,升级重启后,发现系统进不去了。如下图所示。我的是VMWARE虚拟机,不存在独显驱动问题。所以排除这个问题。将lightdm组件重新装一次,问题可以解决。步骤如下:1.重启,看到如下界面,按esc,并进入Advanced options for ubuntu—>Recovery mode2.开启网络3.进入Root账户:需要输入密码4.sudo apt-get purge lightdm 清除lightdm
2020-09-09 10:07:08 3949 2
原创 jupyter的简单使用
感觉jupyter的notebook功能挺方便的。这里简单记录下安装pip3 install jupyter安装需要下载安装很多文件,有可能会失败,重新试几次,不行就只能更换pip源启动并设置密码1,生成jupyter的配置文件:jupyter notebook --generate-config2,控制台继续输入:jupyter notebook password (会输入两次密码,用来验证)3.启动程序jupyter notebook --ip=0.0.0.0打开一个浏览器,输入IP:8
2020-06-06 18:35:12 357
原创 pip配置阿里云源
在使用树莓派的时候,发现pip安装很慢,所以配置下阿里云的pip源在家目录下面创建文件/.pip/pip.confLinux:在~/.pip/pip.conf文件中添加或修改,并添加如下内容[global]index-url = http://mirrors.aliyun.com/pypi/simple/ [install]trusted-host=mirrors.aliyun.com配置其他源 阿里云 http://mirrors.aliyun.com/pypi/simple/
2020-05-28 00:02:11 1598
原创 pyenv和virtualenv环境搭建
在生产环境或者在开发过程中,一般存在多个python版本共存的局面。而直接使用python安装包安装会造成新版本覆盖旧版本的情况。为了方便管理这些python版本。pyenv就是非常好的工具。安装pyenv1.先安装pyenv的运行环境。sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \libreadline-dev libsqlite3-dev wget curl llvm libncurses5-d
2020-05-25 22:06:37 567
原创 LINUX驱动学习之7-字符设备驱动
字符设备驱动设计到两个重要的结构体cdev和file_operations。在include/linux/cdev.h和include/linux/fs.h文件定义一、cdevstruct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_he...
2020-05-23 19:16:18 363
原创 LINUX驱动学习之3-硬件知识准备
一、存储器NOR Flash和CPU的接口属于典型的类SRAM接口,因此不需要额外的控制电路,CPU就可以和NOR FLASH通信,并且数据的交换,修改,可以直接在NOR FLASH上进行。RAM也可再分为静态RAM(SRAM)和动态RAM(DRAM)。DRAM以电荷形式进行存储,数据存储在电容器中。由于电容器会因漏电而出现电荷丢失,所以DRAM器件需要定期刷新。SRAM是静态的,只要供电它...
2020-05-04 10:37:41 257
原创 LINUX驱动学习之4-LINUX内核和内核编程
说到内核,需要提两个重要的内容1.GNU计划:开发了优秀的编译器GCC和调试器GDB等基础设施2.POSIX标准:可移植的操作系统接口。一、内核各版本主要特点二、版本的命名版本有两个小数点,三部分数字,如LINUX 2.6.35, 数字不停的增大,周期2-3个月三、版本变更的详细信息在这个网站可以查到http://kernelnewbies.org/LinuxVersions。四...
2020-05-03 19:53:57 568
原创 LINUX驱动学习之2-Hello world驱动--点亮LED--感性认识,无实操
操作GPIO的本质:实际上就是操作IC的“配置寄存器”和“数据寄存器”。配置寄存器:配置GPIO口输入输出模式,推挽输出还是开漏,上下拉配置数据寄存器:配置GPIO的输出电平高低,或读取输入电平高低一、无操作系统的hello world对于无操作系统,通常代码如下1#define reg_gpio_ctrl GPIO_REG_CTRL2#define reg_gpio_data GP...
2020-05-03 13:52:45 178
原创 LINUX驱动学习之1-摘要
一、硬件-驱动-操作系统-应用的关系如下图所示,结构重点体现了,分层、封装、隔离的特性。二、驱动常见设计错误1.驱动中包含业务层面的处理。不符合高内聚、低耦合的要求。2.应用层直接操作硬件寄存器。note:对于简单的单片机系统,因为外设固定,功能相对单一,因此常常在软件架构上不会太多讲究。但是当需要跑系统的时候,就应该做响应的归纳,升华架构。三、LINUX驱动设备三大类字符设备...
2020-05-03 12:28:32 285
原创 1.matlab基本介绍及基本语法
1.发展历程20世纪70年代中期,美国新墨西哥大学计算机系系主任CleverMoler博士和其同事在美国国家自然科学基金的资助下,开发了调用LINPACK和EISPACK的Fortran子程序,20世纪70年代后期,Moler博士编写了相应的接口程序,并将其命名为MATLAB。1983年,John Little和Moler、Bangert等一起合作开发了第2代专业版MATLAB。1...
2020-03-03 20:31:43 1117
原创 linux内核学习-信号-信号及信号处理
信号是一种软件终端,它提供一种处理异步事件的方法,也是进程同步的唯一方法。根据POSIX标准扩展的信号机制,不仅可以通知事件,还能传递数据。信号来源:1.硬件方式用户按了某些键,如ctrl+c,产生一个SIGINT信号硬件异常产生信号:除数为0,无效存储访问,2.软件方式kill命令sigqueue函数某些软件发送的,如定时器查看信号种类使用明星kill -l查看系统支...
2019-11-06 11:51:05 194
转载 动态追踪技术:trace your kernel Functions!
摘自https://zhuanlan.zhihu.com/p/27190018动态追踪技术:trace your kernel Functions!RiboseYimRiboseYimEngineer & Writer28 人赞同了该文章Ftrace是一个设计用来帮助开发者和设计者监视内核的追踪器,可用于调试或分析延迟以及性能问题。ftrace令人印象最深刻的是作为一个func...
2019-11-04 11:21:49 765
原创 linux内核学习-线程-线程控制
线程:可以理解为轻量级的CPU执行单元。其必须依托在进程内部。同一个进程里面的多个线程是共享进程的资源的。但是线程也有自己的私有数据,包括:线程号(thread ID)寄存器堆栈信号掩码优先级线程私有存储空间线程的头文件为pthread.h 链接库为libpthread.a一、创建线程线程常用函数函数说明pthread_t pthread_sel...
2019-11-02 16:53:31 206
原创 linux内核学习-驱动-I2C
先来看看linux内核的I2C驱动的文件在/drivers/i2c目录下。一、先看看Makefile文件## Makefile for the i2c core.#obj-$(CONFIG_I2C_BOARDINFO) += i2c-boardinfo.oobj-$(CONFIG_I2C) += i2c-core.oobj-$(CONFIG_I2C_SMBUS) += i2c...
2019-11-02 00:39:37 601
原创 linux内核学习-编译架构-2.链接文件lds
上一篇文章说了make命令是怎么根据make menuconfig的配置编译出.o文件的。根据程序编译的过程“检查语法,编译,最后链接”。最后需要有一个文件用来组织这些.o文件。这里最重要的一个就是程序的入口地址。一、找到vmlinux.lds文件根据目标系统的不同的,vmlinux.lds的文件也会不同。比如,arm架构的在/arch/arm/kernel/ vmlinux.lds打开这个...
2019-11-01 22:47:55 505
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人