目录
什么是Lora,这个技术有什么有优势,其他的无线通信技术还有什么
什么是Lora,这个技术有什么有优势,其他的无线通信技术还有什么
低功耗广域网(LPWAN)是物联网解决物联网远距离,LPWAN不只是一种技术,而是代表对的一簇有着各种形式的低功耗广域网技术,只不过Lora是LPWAN中最成熟,应用最广泛的技术之一
在早期的研究中,主要有三种技术为物联网体系提供数据传输服务
- 远距离高速率传输协议,包括蜂窝网络通信技术,如3G,4G,5G等相关技术
- 第二类是近距离高速传输技术,如WIFI ,蓝牙,主要用在家庭和日常生活中
- 第三类是近距离低功耗,如Zigbee ,RFID
上面三类技术都要求比较高的信噪比,无法在复杂环境中实现远距离低功耗传输,LPWAN技术填补了这一技术空白。
Lora是Long Range Communication的简称,可达到-148dBm的接收灵敏度,以0.3~50kbps换取更远的通讯距离大概15km和低功耗。
Lora的系统架构
通信过程。实现Lora通信需要节点,网关,网络服务器和应用服务器。网关收到数据包后,对数据包进行解码,并将解码结果通过蜂窝或者有线网络传输给网络服务器,这一阶段使用TCP/IP 进行传输。网络服务器根据内容将数据发送至不同的应用服务器,供用户读取和使用,这一阶段也使用TCP/IP进行传输和加密。
准备前提
芯片相关资料下载
开发流程
先移植代码后分析代码,根据分析的结果拓展代码的功能
开发环境部署
IAR开发软件下载好后,搭建开发环境
获取官方库文件
我有个想法,既然官方都会外设驱动代码,如果是我来开发的话,我肯定拿到案例开始测试代码
先自己玩明白
有个问题,为什么GPIO有那么多的工作模式
开漏和推挽的作用分别是什么
STM8对sx1278有什么作用
SPI起到什么作用:明白了,串口将数据发送给STM8,STM8通过SPI通信的方式发送给sx1278,之后数据以无线通信的方式传递出去。
实际工作中,外设的代码,我们先移植别人的代码,实现功能,然后再分析代码。
接下来我会根据开发手册研究定时器的计时方法
typedef enum
{
TIM4_Prescaler_1 = ((uint8_t)0x00), /*!< Time base Prescaler = 1 (No effect)*/
TIM4_Prescaler_2 = ((uint8_t)0x01), /*!< Time base Prescaler = 2 */
TIM4_Prescaler_4 = ((uint8_t)0x02), /*!< Time base Prescaler = 4 */
TIM4_Prescaler_8 = ((uint8_t)0x03), /*!< Time base Prescaler = 8 */
TIM4_Prescaler_16 = ((uint8_t)0x04), /*!< Time base Prescaler = 16 */
TIM4_Prescaler_32 = ((uint8_t)0x05), /*!< Time base Prescaler = 32 */
TIM4_Prescaler_64 = ((uint8_t)0x06), /*!< Time base Prescaler = 64 */
TIM4_Prescaler_128 = ((uint8_t)0x07), /*!< Time base Prescaler = 128 */
TIM4_Prescaler_256 = ((uint8_t)0x08), /*!< Time base Prescaler = 256 */
TIM4_Prescaler_512 = ((uint8_t)0x09), /*!< Time base Prescaler = 512 */
TIM4_Prescaler_1024 = ((uint8_t)0x0A), /*!< Time base Prescaler = 1024 */
TIM4_Prescaler_2048 = ((uint8_t)0x0B), /*!< Time base Prescaler = 2048 */
TIM4_Prescaler_4096 = ((uint8_t)0x0C), /*!< Time base Prescaler = 4096 */
TIM4_Prescaler_8192 = ((uint8_t)0x0D), /*!< Time base Prescaler = 8196 */
TIM4_Prescaler_16384 = ((uint8_t)0x0E), /*!< Time base Prescaler = 16384 */
TIM4_Prescaler_32768 = ((uint8_t)0x0F) /*!< Time base Prescaler = 32768 */
}TIM4_Prescaler_TypeDef;
void TIM4_TimeBaseInit(TIM4_Prescaler_TypeDef TIM4_Prescaler,
uint8_t TIM4_Period)
{
/* Check TIM4 prescaler value */
assert_param(IS_TIM4_PRESCALER(TIM4_Prescaler));
/* Set the Autoreload value */
TIM4->ARR = (uint8_t)(TIM4_Period);
/* Set the Prescaler value */
TIM4->PSCR = (uint8_t)(TIM4_Prescaler);
}
TIM4_Prescaler表示定时器工作时钟,TIM4_Period表示定时器需要计数个数
根据定时器工作时钟可以算出计数周期,分频越大,计数周期越大,以1ms为例
分频64
计数周期: 1 / (16M / 32768) =4us 计数个数:1ms / 4us =250
为什么还要创建一个标准工程 ?对官方提供的代码整理和封装?
串口代码解析
发送数据寄存器为空时,触发中断使用`USART_SendDta8()`发送一个字节。直到缓冲中的数据发送完毕关闭中断。
#define TxBufferSize (countof(TxBuffer) - 1)
uint8_t TxBuffer[] = "\n\rHyperTerminal Interrupt: USART-Hyperterminal communication using Interrupt\n\r";
uint8_t NbrOfDataToTransfer = TxBufferSize;
uint8_t TxCounter = 0;
INTERRUPT_HANDLER(USART_TX_IRQHandler, 27)
{
STM_EVAL_LEDInit(LED2);
/* Write one byte to the transmit data register */
USART_SendData8(TxBuffer[TxCounter++]);
if (TxCounter == NbrOfDataToTransfer)
{
STM_EVAL_LEDToggle(LED2);
/* Disable the USART Transmit interrupt */
USART_ITConfig(USART_IT_TXE, DISABLE);
}
}
SPI通信
简单介绍下spi通信。spi是一种全双工,高速的同步的通信方式,spi有四根通信线分别是nss、SCLK、MOSI、MISO,SCLK是由主控发送的同步信号`SPI协议主要作为主控芯片去配置外围谁被的接口协