自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 LoRaMAC-node LoRaWAN 定时器的移植 (二)

因为ST的移植比价简单就不提了,他是基于日历和闹钟实现,我们现在主要分析下saml21的定时器实现,它是一个很普通的rtc定时器很有代表性,其他平台可以参考。我在代码里写了详细的备注大家可以去分析。

2023-03-09 23:47:16 407

原创 LoRaMAC-node LoRaWAN 定时器的移植 (一)

这个代码大部分都是基于STM32的定时器移植,如果大家基于STM32移植协议栈,那么这部分代码机会可以直接使用,STM32 每个系列的RTC都相同,ST是以闹钟实现的,但是一般其他平台和ST的RTC底层是不一样的,他们普遍没有闹钟,只有一个常规的32位或者24位的定时器,其实采用普通的硬件定时器也能做,但是无法实现低功耗情况下的协议使用。这里如果是其他平台,那么就要手动移植一个定时器链表的底层实现,在协议中中有SAM平台,可以参考他的实现。首先我们分析一下顶层的timer代码 ,我在代码中加了完整的注解。

2023-03-09 21:56:19 611

原创 STM32内部参考电压+DMA精准采集电池电压

最近项目又遇到了电池电压采集,锂电池的电压范围是4.2到2.8一般,当锂电池低于3.3V时,单片机供电电压会小于3.3V,那么电池电压参考计算4096就不能对应3.3,所以必须采用内部参考电压。(我项目中用到的是RP104N331 LDO,实际上当电池电压在3.5V左右时,LDO输出就已经不是3.3V,严重影响精度)VREFINT_CAL = *(__IO uint16_t *)(0X1FF80078);首先需要从数据手册知道VREFINT_CAL 的地址信息,读出16的值,所以这里采用了 uint1

2020-09-14 16:29:32 3997 1

原创 stm32在内存中定义未初始化的数据(GCC)

有时候需要将变量定位到闪存或者其他一些非易失性存储器中,这些变量在启动时不应该初始化,在这种情况下,可以创建一个特定的内存区域在ld文件,使用noload 指令。网上有很多类似的教程,但是我当只定义一个段在SDRAM中时,固件的大小也会增加,显然这是不符合要求的。我在tureSTUDIO用户使用文档中的一个文档找到了解决方案。1.更新一个段在MEMORYMY_DATA (rx) : ORIGIN = 0x08010000,LENGTH = 64K2.添加一个段使用未加载指令.my_data (N

2020-07-22 17:45:57 1270

原创 如何通过lorawan联盟认证测试LTCC

LTCC是lorawan预认证测试工具,里面的测试case设计是完全按照我第一节讲的文档设计的,LTCC需要许可证才可以使用,而且要配合lorawan官网的1308网关,这套测试环境是搭建在本地的,所以不需要任何网络。1308有个GUI的配置工具,相对来说比较好用吧,但是有个BUG,在测试EU868时不能把DR0设置为868.1频段,FSK也是。LTCC目前也发现一个BUG,测试中忽然发现多条MAC响应时,LTCC在测试LOG中只认为接收到其中一条MAC的响应,所以一直失败,后面我重新新建测试工程修复。

2020-07-04 20:17:45 378 2

原创 如何通过lorawan联盟认证测试2

本节专门讲解LinkADRRep指令我们先讲解一下MAC指令是如何携带的首先是上行PYH有 Preamble PHDR PHDR_CRC PHYPayload CRCPHRD和PHDR_CRC及CRC都由芯片硬件添加PHYPayload 又分三种入网请求,入网接收,数据。(MACPayload)(MIC是一个4字节的校验值)在PHYPayload中,数据MAC载荷又化分为,FHDR FPort FRMPlayload其中最重要的为FHDRFHDR中又分为DevAddr FCtrl Fcnt

2020-06-30 11:42:56 332

原创 如何通过lorawan联盟认证测试

最近在做lorawan联盟认证测试,记录下整个测试过程。首先需要下载End Device Certification Requirements for EU863-870 MHz ISM Band Devices所有的节点代码测试要求都在里面 ,我目前拿到的版本是V1.6 当然你最好提前准备LTCC工具,后面会讲到。首先我们先看这个文档2.1第一点主要提及所有的下发测试命令都在RX2,除非文档特殊提及2.2.1认证测试激活设备上电每隔10s应该发送一包上行数据,内容不重要,测试控制层 将回复

2020-06-30 09:57:24 666 2

原创 STM32H7内存分布的学习

手里有一块H7的板子,买了很久了,最近拿起来跑跑代码,在使用之前我们要先学习下H7的内存分布,之前可能接触过ST的程序员没有发现有内存分布的特性,这可能是在M7系列新加的特性。(推荐大家看看硬汉嵌入式文档,写的很详细)TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM 用于指令,DTCM 用于数据,特点是跟内核速度一样,而片上 RAM 的速度基本都达不到这个速度。ITCM 和 DTCM这两个是直连 CPU 的。TCM 区TCM : Tightly-Coupled

2020-06-18 16:00:35 2969

原创 SSD1306俗讲5

汉字的显示如果理解了前面所讲,那么这节讲的完全可以领会,取模方式和第三节一样//显示汉字//x,y:起点坐标//num:汉字对应的序号//mode:0,反色显示;1,正常显示void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1,u8 mode){ u8 m,temp; u8 x0=x,y0=y; u16 i,size3=(size1/8+((size1%8)?1:0))*size1; //得到字体一个字符对应点阵集所占的字节数 for(i=0

2020-06-12 17:32:04 283

原创 SSD1306俗讲4

图片的显示这个图片的取模方式和第三讲一样先附上代码//x,y:起点坐标//sizex,sizey,图片长宽//BMP[]:要写入的图片数组//mode:0,反色显示;1,正常显示void OLED_ShowPicture(u8 x,u8 y,u8 sizex,u8 sizey,u8 BMP[],u8 mode){ u16 j=0; u8 i,n,temp,m; u8 x0=x,y0=y; sizey=sizey/8+((sizey%8)?1:0); for(n=0;n<siz

2020-06-12 17:08:43 272

原创 SSD1306俗讲3

为了体会取模不同引起的代码不同 我们在这里再附上一个代码,采用与上一讲不同的取模方式。阴码 列行式 逆向 C51//在指定位置显示一个字符,包括部分字符//x:0~127//y:0~63//size1:选择字体 6x8/6x12/8x16/12x24//mode:0,反色显示;1,正常显示void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1,u8 mode){ u8 i,m,temp,size2,chr1; u8 x0=x,y0=y; if(si

2020-06-12 15:44:59 266

原创 SSD1306俗讲2

OLED_GRAM[x][7-y/8]|=1<<(7-y%8);这是一个画点的函数,把数组OLED_GRAM种的指定的位置为1,采用了简单的与1或的关系。void OLED_DrawPoint(u8 x,u8 y,u8 t)就是画点为1或者0的函数所以此函数只与显存数组有关系,与字库没有任何直接关系void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)接下来看此函数,是用来显示字符,字符来自取模软件,所以此函数的实现与取模绝对相关。

2020-06-12 12:27:12 469

原创 SSD1306俗讲1

SSD1306的俗讲1数组的定义之前我一直想SSD1306的二维数组为什么 不定义为u8 OLED_GRAM[8][128];而是千篇一律的定义为u8 OLED_GRAM[128][8];而且OLED_GRAM[8][128] 更符合定义逻辑,可能是大家不想修改代码,因为数组的定义方式改变,刷新方式就要改变,而且点阵也需要重新生成。其实定义为u8 OLED_GRAM[128][8],也不必那么纠结,可能我有代码强迫症,其实看似定位为128行 8列 与 SSD1306 128 长* 64宽不符合,其

2020-06-11 11:43:10 415

原创 Lorawan MAC俗讲

最近看了一点MAC层的资料,记录一下MAC的功能强大1.LinkCheckReq 这好像是目前唯一一个终端主动发上行的命令,检测链路的连接情况。2.RXTimingSetupReq 可以设置接收窗口1的延时时间,窗口2 是在窗口1接收的1秒后打开,所以窗口2的也会随着修改。3.RXParamSetupReq 可以修改窗口2 的频点 和 速率,还有窗口1的速率。4.NewChannelReq...

2020-04-30 16:05:41 208

原创 SX1262移植中的问题

在项目中发现SX1262在ping-pong 或者 是lorawan中都会出现 timeout异常最终定位到 LoraSymNumTiomeout ,目前也没有找到相关资料,在代码中反复测试,此值设置为 0 即没有异常出现,目前官方提供的代码此值都不为0...

2020-04-16 22:30:41 1731

原创 STM32 H743 轮询SD模式

注意SD不擦除也可以写,如果SD擦除 需要查询SD卡状态,等待其擦除完毕才可以继续读写/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief ...

2020-04-16 17:40:12 830

原创 stm32 HAL adc 连续转换 和 不连续转换

• uint32_tContinuousConvMode --定义当选择的触发事件(软件触发 or 外部触发)发生后规则组执行单一转换还是连续转换 ENABLE or DISABLE• uint32_tDiscontinuousConvMode—指定当规则组是完整序列/非连续序列(序列分布在)时是否转换序列;只有在Continuous禁用时,DisContinuous才有效;如果Conti...

2020-04-04 23:17:52 2537 1

原创 CR95HF Tag Dection

因为项目的需要最近在调试NFC读卡器,实现了CR95HF的tag dection,理论功耗可以在50ua左右,还没有实际测试,在tag dection 模式设置之前,需要先做开机校准测试,确定两个阈值,当CF95进入tag dection时,检测到的DAC值在两个阈值之间,则为没有检测到NFC,返回 000100其中比较复杂的校准的环节,需要7步校准,确定阈值。有兴趣的,大家可以一起沟通另外C...

2019-10-14 14:11:36 373

原创 CR95HF调试过程

CR95HF是一个比较早的芯片,官方的例程只有读卡ID的demo,由于项目的需要,采用模拟SPI,经过一个星期的调试,可以实现简单的读卡信息,和读单个块,写单个块程序,tag采用M24LR04,协议采用iso15693LOG:02020000<<<000002020105<<<0000090468010150<<&...

2019-09-19 16:39:45 1455

原创 printf重定向 在gcc和keil都可以使用

#ifdef GNUC#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)PUTCHAR_PROTOTYPE{HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);return ch;}int _write(int file, char *ptr, int...

2019-08-13 18:12:05 1287

原创 LORWAN-MAC-NODE SX1276GetPaSelect

sx1276存在SX1276GetPaSelect 选择发射射频管脚uint8_t SX1276GetPaSelect( uint32_t channel ){return RF_PACONFIG_PASELECT_PABOOST;}通过修改此函数可以更改发射管脚,PABOOST发射管脚最大发射功率为20dbm,并且为全频段输出管脚PA_HF为高频输出管脚PA_LF为低频输出管脚这...

2019-08-09 14:45:43 213 2

原创 移植LORAWAN NODE

移植lorawan节点 于stm32L系列cubemx效率不言而喻,直接生成spi,uart,clock配置移植lorawan-node的文件夹,主要有system文件夹,基本不需要改动,然后移植mac文件夹,不需要改动,最后移植boad文件夹,需要rtc-board.c,1276-board.c,其中rtc主要要打开rtc的LSE时钟源,1276-board.c需要实现SpiInoutui...

2019-08-09 12:21:08 1956 2

原创 LORA MOSQUITTO的简单使用

LORA MOSQUITTO最近在学习lorasever的搭建,随便学习一下mqtt,脑子记不住就写下来在终端运行mosquitto_sub --help 或 mosquitto_pub --help-A : bind the outgoing socket to this host/ip address. Use to control which interfacethe client ...

2019-08-03 00:01:08 330

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除