终于把433通讯整出来了,不过程序空间快不够了要好好优化一下

This commit is contained in:
2021-10-15 22:06:08 +08:00
parent 36917d148f
commit 230f928a0f
52 changed files with 9483 additions and 6084 deletions
+72
View File
@@ -0,0 +1,72 @@
/*
* flash.c
*
* Created on: 2021年10月15日
* Author: wuwenfeng
*/
#include "flash.h"
uint32_t STMFLASH_ReadWord(uint32_t faddr)
{
return *(uint32_t*)faddr;
}
void STMFLASH_Write(uint32_t WriteAddr,uint32_t *pBuffer,uint32_t NumToWrite)
{
FLASH_EraseInitTypeDef FlashEraseInit;
HAL_StatusTypeDef FlashStatus=HAL_OK;
uint32_t PageError=0;
uint32_t addrx=0;
uint32_t endaddr=0;
if(WriteAddr<STM32_FLASH_BASE||WriteAddr%4)return; //非法地址
HAL_FLASH_Unlock(); //解锁
addrx=WriteAddr; //写入的起始地址
endaddr=WriteAddr+NumToWrite*8; //写入的结束地址
if(addrx<0X1FFF0000)
{
while(addrx<endaddr) //扫清一切障碍.(对非FFFFFFFF的地方,先擦除)
{
if(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF) //有非0XFFFFFFFF的地方,要擦除这个扇区
{
FlashEraseInit.TypeErase=FLASH_TYPEERASE_PAGES; //擦除类型,页擦除
FlashEraseInit.PageAddress=31; //从哪页开始擦除
FlashEraseInit.NbPages=1; //一次只擦除一页
if(HAL_FLASHEx_Erase(&FlashEraseInit,&PageError)!=HAL_OK)
{
break;//发生错误了
}
}else addrx+=4;
FLASH_WaitForLastOperation(FLASH_WAITETIME); //等待上次操作完成
}
}
FlashStatus=FLASH_WaitForLastOperation(FLASH_WAITETIME); //等待上次操作完成
if(FlashStatus==HAL_OK)
{
while(WriteAddr<endaddr) //写数据
{
if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD,WriteAddr,*(uint64_t*) pBuffer)!=HAL_OK)//写入数据
{
break; //写入异常
}
WriteAddr+=8;
pBuffer+=2;
}
}
HAL_FLASH_Lock(); //上锁
}
void STMFLASH_Read(uint32_t ReadAddr,uint32_t *pBuffer,uint32_t NumToRead) //连续读取
{
uint32_t i;
for(i=0;i<NumToRead;i++)
{
pBuffer[i]=STMFLASH_ReadWord(ReadAddr); //读取4个字节.
ReadAddr+=4; //偏移4个字节.
}
}
+18
View File
@@ -0,0 +1,18 @@
/*
* flash.h
*
* Created on: 2021年10月15日
* Author: wuwenfeng
*/
#ifndef FLASH_H_
#define FLASH_H_
#include "main.h"
#define STM32_FLASH_BASE 0x08007c00
#define FLASH_WAITETIME 100
void STMFLASH_Write(uint32_t WriteAddr,uint32_t *pBuffer,uint32_t NumToWrite);
void STMFLASH_Read(uint32_t ReadAddr,uint32_t *pBuffer,uint32_t NumToRead);
#endif /* FLASH_H_ */
+58 -8
View File
@@ -7,7 +7,8 @@
#include "my_code.h"
#include "button.h"
#include "ht1621.h"
#include "flash.h"
#include "r480r.h"
extern ADC_HandleTypeDef hadc;
@@ -294,6 +295,8 @@ void my_code()
moto.moto2b_=0;
HT1621_Init();
r480_init();
while(1)
{
//get ADC
@@ -415,7 +418,7 @@ void my_code()
dis_buff.d_num[2]=(countdown/1000)%10;
dis_buff.d_num[1]=((countdown/10000)%10);
dis_buff.d_num[1]=dis_buff.d_num[1]==0?16:dis_buff.d_num[1];
dis_buff.dot3=1;
dis_buff.dot4=1;
if(key3.code!=0)
{
@@ -461,7 +464,7 @@ void my_code()
dis_buff.d_num[2]=(countdown/1000)%10;
dis_buff.d_num[1]=((countdown/10000)%10);
dis_buff.d_num[1]=dis_buff.d_num[1]==0?16:dis_buff.d_num[1];
dis_buff.dot3=1;
dis_buff.dot4=1;
if(key2.code!=0)
{
mode=2;
@@ -487,12 +490,12 @@ void my_code()
if(HAL_GetTick()>move)
{
move=HAL_GetTick()+100;
if(dis_buff.dot1==1)
if(dis_buff.dot4==1)
{
dis_buff.dot1=0;
dis_buff.dot4=0;
}else
{
dis_buff.dot1=1;
dis_buff.dot4=1;
}
countdown-=100;
if(countdown<0)
@@ -510,12 +513,12 @@ void my_code()
if(countdown_set<100){countdown_set=100;}
if(countdown_set>60000){countdown_set=60000;}
if(key1.code!=0){mode=1;}
if(key4.code!=0){mode=1;}
dis_buff.d_num[3]=(countdown_set/100)%10;
dis_buff.d_num[2]=(countdown_set/1000)%10;
dis_buff.d_num[1]=((countdown_set/10000)%10);
dis_buff.d_num[1]=dis_buff.d_num[1]==0?16:dis_buff.d_num[1];
dis_buff.dot3=1;
break;
case 5:
@@ -558,6 +561,26 @@ void my_code()
}
break;
case 6:
//debug
if(HAL_GetTick()>runtime)
{
runtime+=1000;
if(dis_buff.led_run==1)
{
dis_buff.led_run=0;
dis_buff.dot4=1;
}else
{
dis_buff.led_run=1;
dis_buff.dot4=0;
}
}
dis_buff.d_num[3]=(r480.times/100)%10;
dis_buff.d_num[2]=(r480.times/1000)%10;
dis_buff.d_num[1]=((r480.times/10000)%10);
break;
}
@@ -569,10 +592,37 @@ void my_code()
GEI_BUTTON_CODE(&overload,0);
}
switch(r480.key)
{
case 0xd7:
dis_buff.button_flag[0]=1;
break;
case 0xdb:
dis_buff.button_flag[1]=1;
break;
case 0xdd:
dis_buff.button_flag[2]=1;
break;
case 0xde:
dis_buff.button_flag[3]=1;
break;
}
r480.key=0;
GEI_BUTTON_CODE(&key1,dis_buff.button_flag[0]);
GEI_BUTTON_CODE(&key2,dis_buff.button_flag[1]);
GEI_BUTTON_CODE(&key3,dis_buff.button_flag[2]);
GEI_BUTTON_CODE(&key4,dis_buff.button_flag[3]);
dis_buff.button_flag[0]=0;
dis_buff.button_flag[1]=0;
dis_buff.button_flag[2]=0;
dis_buff.button_flag[3]=0;
HT1621_Display_GetButton();
hc2_sever();
moto_server();
+107
View File
@@ -0,0 +1,107 @@
/*
* r480r.c
*
* Created on: 2021年10月15日
* Author: wuwenfeng
*/
#include "r480r.h"
#define read_infrared HAL_GPIO_ReadPin(infeaed_GPIO_Port,infeaed_Pin)
extern TIM_HandleTypeDef htim14;
uint16_t timer_100us_tick=0;
int read_bit_flag=0;
int read_char_flag=0;
char read_data_buffer[3];
char read_begin=0;
void r480_init()
{
HAL_TIM_Base_Start_IT(&htim14);
r480.times=0;
}
void read_433_exit()
{
char a=read_infrared;
int b;
if(read_begin==0)
{
if(a==0)
{
timer_100us_tick=0;
return ;
}else
{
if(timer_100us_tick>70&&timer_100us_tick<100)
{
read_begin=1;
r480.times++;
read_bit_flag=0;
read_char_flag=0;
timer_100us_tick=0;
return ;
}
}
}else
{
if(timer_100us_tick<5)
{
timer_100us_tick=0;
return ;
}else if(timer_100us_tick<12)
{
read_data_buffer[read_char_flag]<<=1;
if(a==1)
{
read_data_buffer[read_char_flag]|=0x01;
}
read_bit_flag++;
if(read_bit_flag==8)
{
read_bit_flag=0;
read_char_flag++;
if(read_char_flag==3)
{
//got data
read_char_flag=0;
timer_100us_tick=0;
r480.add[0]=read_data_buffer[0];
r480.add[1]=read_data_buffer[1];
r480.key=read_data_buffer[2];
}
}
timer_100us_tick=0;
return ;
}else//time out
{
read_begin=0;
timer_100us_tick=0;
return ;
}
}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin)
{
case infeaed_Pin:
read_433_exit();
return ;
break;
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//100us
{
if (htim == (&htim14))
{
timer_100us_tick++;
}
}
+24
View File
@@ -0,0 +1,24 @@
/*
* r480r.h
*
* Created on: 2021年10月15日
* Author: wuwenfeng
*/
#ifndef R480R_H_
#define R480R_H_
#include "main.h"
struct
{
char add[2];
char key;
uint16_t times;
}r480;
void r480_init();
#endif /* R480R_H_ */