一个特别不错的STM32实现LORA通信的资料
SX1278芯片的中文资料下载:http://www.51hei.com/bbs/dpj-119513-1.html
简单基本收发功能测试,大部分照搬原参考程序,增加部分注释。
LORA只是工程一部分,现并未完善,跟LORA不相关的可直接忽视。
A板:收到数据后 回传ABCDE;
B板:收到数据后 回传VHELL!
硬件注意:只需最小系统,串口测试使用USART1;晶振都为外部12M..
仅供参考!
单片机源程序如下:
- #include "X_02.h"
- u32 error0,error_i,crc,EMM,BE_EN,xx0;
- u32 BE_EN0,BE_EN2;
- int main(void)
- {
- init();
- gSendBuffer[0] = *"V";
- gSendBuffer[1] = *"H";
- gSendBuffer[2] = *"e";
- gSendBuffer[3] = *"l";
- gSendBuffer[4] = *"l";
- gSendBuffer[5] = *"!";
- gSendBuffer[6] = *" ";
- while(1)
- {
- LORA_BOX(); //处理空闲模式,发射接收都在里面,主要的就是这个函数
- if(vvi502%40==0)
- {
- vvi502++;
- EN_ROLA=1; //发射
- TES0=1;
- delay_ms(40);
- TES0=0;
- }
- }
- }
- void init(void)
- {
- Stm32_Clock_Init(SYSCLK_i/HSE_i); //系统时钟设置 //12MHz*6=72M
- GPIOX_init(); //初始化通用硬件接口
- delay_ms(200);
- // ATMCxx_init();
- LORA_int();
- // DMA_init(); //注意DMA与ADC初始顺序,否则规则传输顺序有误!?
- // ADC_init();
- EXTIX_Init();
- PVD_init();
- Ci();
- TIM2_Int_Init(20,719); //1us/data 200us
- TIM3_Int_Init(64000,35); //500ns/data 32ms //预分频器35,重装载64000,溢出 32MS
- }
- void GPIOX_init(void)
- {
- //AFIO寄存器操作异于其它寄存器;配置某位 其余位默认0配置
- //关闭JTAG/SWD;PB3,4;PA13,14,15;PE2,3,4,5,6;引脚重定义,I/O可用;TIME3_CHX1~3完全重映射;
- RCC->APB2ENR|=1<<0;//使能AFIO时钟
- AFIO->MAPR&=0x00fff3ff;
- AFIO->MAPR|=0x04000c00;
- delay_us(20);
- RCC->APB2ENR&=~(1<<0);
- /* RCC->APB2ENR|=1<<2; //使能PORTA时钟 设置PA13/14/15 上拉输入 PA2/3 推挽输出 2M .max
- GPIOA->CRH&=0X000FFFFF;
- GPIOA->CRH|=0X88800000;
- GPIOA->CRL&=0XFFFF00FF;
- GPIOA->CRL|=0X00002200;
-
- RCC->APB2ENR|=1<<3; //使能PORTB时钟 设置PB3/4/5 上拉输入 PB0/1/6/7/12~15 推挽输出 2M .max
- GPIOB->CRH&=0X0000FFFF;
- GPIOB->CRH|=0X22220000;
- GPIOB->CRL&=0X00000F00;
- GPIOB->CRL|=0X22888022;
-
- RCC->APB2ENR|=1<<4; //使能PORTC时钟 设置PC12 上拉输入 P4/5 推挽输出 2M .max
- GPIOC->CRH&=0XFFF0FFFF;
- GPIOC->CRH|=0X00080000;
- GPIOC->CRL&=0XFF00FFFF;
- GPIOC->CRL|=0X00220000;
-
- RCC->APB2ENR|=1<<5; //使能PORTD时钟 设置PD2 上拉输入
- GPIOD->CRL&=0XFFFFF0FF;
- GPIOD->CRL|=0X00000800;*/
-
- RCC->APB2ENR|=1<<3; //使能PORTB时钟 设置PB3/4/5 上拉输入 PB0/1/6/7/12~15 推挽输出 2M .max
- GPIOB->CRL&=0X0FFFFFFF;
- GPIOB->CRL|=0X20000000;
-
- TES0=0;
- BE_i=0;
- SK1=0;
- SK2=0;
- DOUT1=0;
- DOUT2=0;
- DOUT3=0;
- DOUT4=0;
- DOUT5=0;
- DOUT6=0;
- DOUT7=0;
- DOUT8=0;
- }
- void PVD_init(void)//低压中断设置
- {
- RCC->APB1ENR|=1<<28; //使能PWR时钟
- EXTI->IMR|=1<<16; //使能EXTI线16:PVD中断
- // EXTI->EMR|=1<<16; //使能EXTI线16:PVD事件
- EXTI->RTSR|=1<<16; //使能EXTI线16:PVD上升沿中断 WHY!!
- // EXTI->FTSR|=1<<16; //使能EXTI线16:PVD下降沿中断
- PWR->CR|=0X90; //使能PVD 监测电压:2.6V
- MY_NVIC_Init(1,1,PVD_IRQChannel,2);//抢占1,子优先级1,组2
- }
-
- void BOX(void)
- {}
- void ERR_x(void)
- {
- if(error0||error_i)
- {
- EMM++;
- if(EMM%10)
- {
- BE_EN=1;
- }
- else
- {
- BE_EN=0;
- }
- if(EMM>4)
- {
- EMM=0;
- BE_EN=0;
- error0=0;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
LORA FOR STM32_TES1.1.7z
(2.56 MB, 下载次数: 712)
|