一個特別不錯的STM32實現LORA通信的資料
SX1278芯片的中文資料下載:http://www.torrancerestoration.com/bbs/dpj-119513-1.html
簡單基本收發(fā)功能測試,大部分照搬原參考程序,增加部分注釋。
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(); //處理空閑模式,發(fā)射接收都在里面,主要的就是這個函數
- if(vvi502%40==0)
- {
- vvi502++;
- EN_ROLA=1; //發(fā)射
- 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初始順序,否則規(guī)則傳輸順序有誤。
- // 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 監(jiān)測電壓:2.6V
- MY_NVIC_Init(1,1,PVD_IRQChannel,2);//搶占1,子優(yōu)先級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)
2024-1-2 22:04 上傳
點擊文件名下載附件
lora stm32
|