终于把433通讯整出来了,不过程序空间快不够了要好好优化一下
This commit is contained in:
@@ -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个字节.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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();
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
}
|
||||
@@ -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_ */
|
||||
Reference in New Issue
Block a user