优化中,生成HEX文件
This commit is contained in:
+1
-59
@@ -9,64 +9,6 @@
|
||||
#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个字节.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -10,9 +10,5 @@
|
||||
|
||||
#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_ */
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* gpio.c
|
||||
*
|
||||
* Created on: Oct 24, 2021
|
||||
* Author: wuwenfeng
|
||||
*/
|
||||
#include "gpio.h"
|
||||
|
||||
void change_io_function(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,char a)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
GPIO_InitStruct.Pin = GPIO_Pin;
|
||||
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
if(a==1)
|
||||
{
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
}
|
||||
if(a==0)
|
||||
{
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
}
|
||||
HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* gpio.h
|
||||
*
|
||||
* Created on: Oct 24, 2021
|
||||
* Author: wuwenfeng
|
||||
*/
|
||||
|
||||
#ifndef GPIO_H_
|
||||
#define GPIO_H_
|
||||
#include "main.h"
|
||||
void change_io_function(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,char a);
|
||||
|
||||
#endif /* GPIO_H_ */
|
||||
+13
-78
@@ -9,29 +9,20 @@
|
||||
#include "ht1621.h"
|
||||
#include "my_code.h"
|
||||
|
||||
#define HT1621_addrbit 6 //驱动ic的ram地址位数 A5-A0
|
||||
#define HT1621_addrbit 6
|
||||
|
||||
/**
|
||||
* @brief HT1621 clk
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void WriteClockHT1621(void)
|
||||
{
|
||||
HC595_SCK(0);
|
||||
HC595_SCK(1);
|
||||
}
|
||||
/**
|
||||
* @brief Write HT1621 Command
|
||||
* @param FunctonCode->功能/命令码
|
||||
* @retval None
|
||||
*/
|
||||
|
||||
void WriteCommandHT1621(unsigned char FunctonCode)
|
||||
{
|
||||
unsigned char Shift = 0x80;
|
||||
unsigned char i;
|
||||
HC595_RCK(0); //CS 片选开
|
||||
HC595_DCK(1); //100
|
||||
HC595_RCK(0);
|
||||
HC595_DCK(1);
|
||||
WriteClockHT1621();
|
||||
HC595_DCK(0);
|
||||
WriteClockHT1621();
|
||||
@@ -48,71 +39,26 @@ void WriteCommandHT1621(unsigned char FunctonCode)
|
||||
Shift = Shift >> 1;
|
||||
}
|
||||
{HC595_DCK(0);}
|
||||
WriteClockHT1621(); //发送一个 0 命令码中最后一位 X
|
||||
HC595_RCK(1); //CS 片选关
|
||||
WriteClockHT1621();
|
||||
HC595_RCK(1);
|
||||
HC595_DCK(1);
|
||||
}
|
||||
/**
|
||||
* @brief Write 1 data to HT1621
|
||||
* @param Addr->写入ram的地址
|
||||
* @param Databuf->写入ram的数据
|
||||
* @retval None
|
||||
*/
|
||||
void Write1DataHT1621(unsigned char Addr,unsigned char Dat)
|
||||
{
|
||||
unsigned char i;
|
||||
unsigned char Shift;
|
||||
HC595_RCK(0); //CS 片选开
|
||||
HC595_DCK(1); //101
|
||||
WriteClockHT1621();
|
||||
HC595_DCK(0);
|
||||
WriteClockHT1621();
|
||||
HC595_DCK(1);
|
||||
WriteClockHT1621();
|
||||
Shift = 0x20; //屏蔽高3位 只用5位
|
||||
for( i = 0; i < HT1621_addrbit; i++)
|
||||
{
|
||||
if(Addr & Shift)
|
||||
{HC595_DCK(1);}
|
||||
else
|
||||
{HC595_DCK(0);}
|
||||
WriteClockHT1621();
|
||||
Shift = Shift >> 1;
|
||||
}
|
||||
|
||||
Shift = 0x01;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if( Dat & Shift)
|
||||
{HC595_DCK(1);}
|
||||
else
|
||||
{HC595_DCK(0);}
|
||||
WriteClockHT1621();
|
||||
Shift = Shift << 1;
|
||||
}
|
||||
HC595_RCK(1); //CS 片选关
|
||||
HC595_DCK(1);
|
||||
}
|
||||
/**
|
||||
* @brief Write n data to HT1621
|
||||
* @param Addr->写入ram的起始地址
|
||||
* @param Databuf->写入ram的数据buffer
|
||||
* @param Cnt->写入ram的数据个数
|
||||
* @retval None
|
||||
*/
|
||||
|
||||
|
||||
void WritenDataHT1621(unsigned char Addr,unsigned char *Databuf,unsigned char Cnt)
|
||||
{
|
||||
unsigned char i,j;
|
||||
unsigned char Shift;
|
||||
unsigned char dataval;
|
||||
HC595_RCK(0); //CS 片选开
|
||||
HC595_RCK(0);
|
||||
HC595_DCK(1); //101
|
||||
WriteClockHT1621();
|
||||
HC595_DCK(0);
|
||||
WriteClockHT1621();
|
||||
HC595_DCK(1);
|
||||
WriteClockHT1621();
|
||||
Shift = 0x20; //屏蔽高3位 只用5位
|
||||
Shift = 0x20;
|
||||
for( i = 0; i < HT1621_addrbit; i++)
|
||||
{
|
||||
if (Addr & Shift)
|
||||
@@ -136,36 +82,25 @@ void WritenDataHT1621(unsigned char Addr,unsigned char *Databuf,unsigned char Cn
|
||||
Shift = Shift << 1;
|
||||
}
|
||||
}
|
||||
HC595_RCK(1); //CS 片选关
|
||||
HC595_RCK(1);
|
||||
HC595_DCK(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief HT1621 Init
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void HT1621_Init(void) //退出掉电低功耗状态重新初始化HT1621
|
||||
|
||||
void HT1621_Init(void)
|
||||
{
|
||||
HC595_RCK(1);
|
||||
HC595_SCK(1);
|
||||
HC595_DCK(1);
|
||||
|
||||
WriteCommandHT1621(OSC_ON);
|
||||
WriteCommandHT1621(DISP_ON);
|
||||
|
||||
WriteCommandHT1621(COM_1_3__4);
|
||||
|
||||
//上电默认配置(以下未用功能关闭降低功耗)
|
||||
|
||||
WriteCommandHT1621(TIMER_DIS);
|
||||
WriteCommandHT1621(WDT_DIS);
|
||||
WriteCommandHT1621(BUZZ_OFF);
|
||||
WriteCommandHT1621(IRQ_DIS);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
void WriteClockHT1621(void);
|
||||
|
||||
void WriteCommandHT1621(unsigned char FunctonCode);
|
||||
void Write1DataHT1621(unsigned char Addr,unsigned char Dat);
|
||||
void WritenDataHT1621(unsigned char Addr,unsigned char *Databuf,unsigned char Cnt);
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
* iic.c
|
||||
*
|
||||
* Created on: Oct 24, 2021
|
||||
* Author: wuwenfeng
|
||||
*/
|
||||
|
||||
#include "iic.h"
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* iic.h
|
||||
*
|
||||
* Created on: Oct 24, 2021
|
||||
* Author: wuwenfeng
|
||||
*/
|
||||
|
||||
#ifndef IIC_H_
|
||||
#define IIC_H_
|
||||
|
||||
#include "main.h"
|
||||
|
||||
|
||||
#endif /* IIC_H_ */
|
||||
+12
-64
@@ -5,6 +5,7 @@
|
||||
* Author: wuwenfeng
|
||||
*/
|
||||
#include "my_code.h"
|
||||
#include "gpio.h"
|
||||
#include "button.h"
|
||||
#include "ht1621.h"
|
||||
#include "flash.h"
|
||||
@@ -43,27 +44,10 @@ struct
|
||||
|
||||
}moto;
|
||||
|
||||
void ds_in_or_out(char a)//change the io function
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
GPIO_InitStruct.Pin = HC595_DLK_Pin;
|
||||
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
if(a==0)
|
||||
{
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
}
|
||||
if(a==1)
|
||||
{
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
}
|
||||
HAL_GPIO_Init(HC595_DLK_GPIO_Port, &GPIO_InitStruct);
|
||||
}
|
||||
uint8_t Read_Ds()
|
||||
{
|
||||
ds_in_or_out(0);
|
||||
change_io_function(HC595_DLK_GPIO_Port,HC595_DLK_Pin,1);
|
||||
if(READ_HC595_DCK){return 0;}else{return 1;}
|
||||
//return READ_HC595_DCK;
|
||||
}
|
||||
@@ -71,7 +55,7 @@ uint8_t Read_Ds()
|
||||
//send data to 959
|
||||
void Sand_Byte_to_595_2(uint8_t h)
|
||||
{
|
||||
ds_in_or_out(1);
|
||||
change_io_function(HC595_DLK_GPIO_Port,HC595_DLK_Pin,0);
|
||||
HC595_DCK(0);
|
||||
HC595_SCK2(0);
|
||||
HC595_RCK(0);
|
||||
@@ -225,8 +209,8 @@ const unsigned char LED_Tab[]=
|
||||
#define H 0x01
|
||||
void HT1621_Display_GetButton(void)
|
||||
{
|
||||
unsigned char send_buff[8]={0,0,0,0,0,0,0,0,0};
|
||||
unsigned char lcd_buff[4]={0,0,0,0};
|
||||
unsigned char send_buff[8];
|
||||
unsigned char lcd_buff[4];
|
||||
|
||||
//WritenDataHT1621(0,send_buff,8);
|
||||
|
||||
@@ -277,22 +261,6 @@ void my_code()
|
||||
long countdown_set=15000;
|
||||
|
||||
|
||||
dis_buff.moto1a=0;
|
||||
dis_buff.moto1b=0;
|
||||
dis_buff.moto2a=0;
|
||||
dis_buff.moto2b=0;
|
||||
|
||||
moto.moto_run=0;
|
||||
moto.pwm_run=0;
|
||||
moto.moto1a=0;
|
||||
moto.moto1b=0;
|
||||
moto.moto2a=0;
|
||||
moto.moto2b=0;
|
||||
|
||||
moto.moto1a_=0;
|
||||
moto.moto1b_=0;
|
||||
moto.moto2a_=0;
|
||||
moto.moto2b_=0;
|
||||
|
||||
HT1621_Init();
|
||||
r480_init();
|
||||
@@ -352,7 +320,13 @@ void my_code()
|
||||
moto.moto1b=0;
|
||||
moto.moto2a=0;
|
||||
moto.moto2b=0;
|
||||
|
||||
dis_buff.d_num[0]=16;
|
||||
dis_buff.d_num[1]=16;
|
||||
dis_buff.d_num[2]=16;
|
||||
dis_buff.d_num[3]=16;
|
||||
dis_buff.dot1=0;
|
||||
dis_buff.dot2=0;
|
||||
dis_buff.dot3=0;
|
||||
if(HAL_GetTick()>runtime)
|
||||
{
|
||||
runtime+=1000;
|
||||
@@ -367,14 +341,7 @@ void my_code()
|
||||
dis_buff.dot4=0;
|
||||
}
|
||||
}
|
||||
dis_buff.d_num[0]=16;
|
||||
dis_buff.d_num[1]=16;
|
||||
dis_buff.d_num[2]=16;
|
||||
dis_buff.d_num[3]=16;
|
||||
|
||||
dis_buff.dot1=0;
|
||||
dis_buff.dot2=0;
|
||||
dis_buff.dot3=0;
|
||||
|
||||
overload_times=0;
|
||||
if(key2.code!=0)
|
||||
@@ -562,26 +529,7 @@ 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;
|
||||
}
|
||||
|
||||
if(ADCC.adc_value[0]>600||ADCC.adc_value[1]>600)
|
||||
|
||||
@@ -24,16 +24,16 @@ struct display_penal
|
||||
{
|
||||
unsigned char d_num[4];
|
||||
unsigned char button_flag[4];
|
||||
char dot1:1;
|
||||
char dot2:1;
|
||||
char dot3:1;
|
||||
char dot4:1;
|
||||
char led_run:1;
|
||||
char dot1;
|
||||
char dot2;
|
||||
char dot3;
|
||||
char dot4;
|
||||
char led_run;
|
||||
|
||||
char moto1a:1;
|
||||
char moto1b:1;
|
||||
char moto2a:1;
|
||||
char moto2b:1;
|
||||
char moto1a;
|
||||
char moto1b;
|
||||
char moto2a;
|
||||
char moto2b;
|
||||
}dis_buff;
|
||||
|
||||
#endif /* MY_CODE_H_ */
|
||||
|
||||
Reference in New Issue
Block a user