源码/核心板/Src/OnChipDevices/Flash.c | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
源码/核心板/Src/OnChipDevices/Flash.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
源码/核心板/Src/OnChipDevices/Usart.c | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
源码/核心板/Src/OnChipDevices/Usart.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
源码/核心板/Src/application/global_param.c | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
源码/核心板/Src/application/global_param.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
源码/核心板/Src/application/serial_at_cmd_app.c | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
源码/核心板/Src/application/serial_at_cmd_app.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
源码/核心板/Src/main.c | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Ô´Âë/ºËÐİå/Src/OnChipDevices/Flash.c
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,162 @@ #include "Flash.h" /** * @brief Calculate the number of pages * @param Size: The image size,the units of Size is Byte * @retval The number of pages or error */ uint32_t FLASH_Pages_Calculate(uint32_t Size) { uint32_t Flash_Page_Number = 0; if( Size % PAGE_SIZE != 0) { Flash_Page_Number = ( Size / PAGE_SIZE) + 1; } else Flash_Page_Number = Size / PAGE_SIZE; if( Flash_Page_Number > MAX_FPAGE_NUM) return 0; else return Flash_Page_Number; } /** * @brief erase the block before write Data * @param Address: the start address to erase Len: the length need to erase,uints is Byte * @retval 0:error; 1:success */ uint32_t FLASH_Prepare(uint32_t Address, uint32_t Len) //èµ·å§å°åååé¿ { uint32_t NbrOFPage = 0; uint32_t EraseCount = 0; FLASH_Status FLASHStatus = FLASH_COMPLETE; FLASH_Unlock(); NbrOFPage = FLASH_Pages_Calculate( Len ); for(; EraseCount < NbrOFPage; EraseCount++) { FLASHStatus = FLASH_ErasePage( Address + ( PAGE_SIZE * EraseCount) ); if( FLASHStatus != FLASH_COMPLETE) break; } FLASH_Lock(); if( EraseCount != NbrOFPage) return 0; else return 1; } /** * @brief read the data from flash * @param Address: the start address to read Len: the length need to read,uints is Byte * @retval */ void FLASH_Read( uint32_t Address, uint8_t* Readbuff, uint32_t Len) { uint32_t ReadCount = 0; for( ; ReadCount < Len; ReadCount++) { Readbuff[ ReadCount ] = ((uint8_t *)Address)[ ReadCount ]; } } /** * @brief write data into flash * @param Address: the start address to write Len: the length need to write,uints is Byte * @retval 0:error ; 1:success */ uint32_t FLASH_Write( uint32_t Address, const uint8_t* pData, uint32_t Len) { uint32_t WriteCount = 0; uint32_t FlashDestination = Address; uint32_t FlashSource = (uint32_t)pData; FLASH_Status FLASHStatus = FLASH_COMPLETE; FLASH_Unlock(); for( ; WriteCount < Len; WriteCount+=2) { FLASHStatus = FLASH_ProgramHalfWord(FlashDestination, *(uint16_t*)FlashSource); if( FLASHStatus != FLASH_COMPLETE) { break; } if (*(uint16_t*)FlashDestination != *(uint16_t*)FlashSource) { break; } FlashDestination += 2; FlashSource += 2; } FLASH_Lock(); if( WriteCount < Len) return 0; else return 1; } ///** // * @brief Disable the write protection of desired pages // * @param None // * @retval None // */ //void FLASH_Dis_WriteProt_Pages(void) //{ // uint32_t UserOptionByte = 0, WRPR = 0; // uint16_t Var1 = OB_IWDG_SW, Var2 = OB_STOP_NoRST, Var3 = OB_STDBY_NoRST; // FLASH_Status Status = FLASH_BUSY; // static uint32_t UserMemoryMask = 0; // WRPR = FLASH_GetWriteProtectionOptionByte(); // /* Test if user memory is write protected */ // if ((WRPR & UserMemoryMask) != UserMemoryMask) // { // UserOptionByte = FLASH_GetUserOptionByte(); // UserMemoryMask |= WRPR; // Status = FLASH_EraseOptionBytes(); //è§£é¤ä¿æ¤ // if (UserMemoryMask != 0xFFFFFFFF) // { // Status = FLASH_EnableWriteProtection((uint32_t)~UserMemoryMask); // } // /* Test if user Option Bytes are programmed */ // if ((UserOptionByte & 0x07) != 0x07) // { // /* Restore user Option Bytes */ // if ((UserOptionByte & 0x01) == 0x0) // { // Var1 = OB_IWDG_HW; // } // if ((UserOptionByte & 0x02) == 0x0) // { // Var2 = OB_STOP_RST; // } // if ((UserOptionByte & 0x04) == 0x0) // { // Var3 = OB_STDBY_RST; // } // FLASH_UserOptionByteConfig(Var1, Var2, Var3); // } // // } //} Ô´Âë/ºËÐİå/Src/OnChipDevices/Flash.h
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ #include "stm32f10x.h" #define FLASH_SIZE (uint32_t)0x10000 #define PAGE_SIZE (0x400) //C8T6 Flash is 64KB ,each page is 1KB #define MAX_FPAGE_NUM 64 #define FLASH_BASE_ADDR (uint32_t)0x08000000 //the start address of APP,keep the 0x8000000-0x8004FFF forIAP(20K) #define FLASH_APP_FORMAL_ADDR (uint32_t)0x08001000 //the start address of formal software #define FLASH_APP_TEMP_ADDR (uint32_t)0x08008000 //the start address of temp software,wait for checks #define FLASH_IAP_CTRL_MAP (uint32_t)0x0800F000 //the control map start address, #define MAX_APP_ADDR (uint32_t)0x0800FFFF //the max array of Flash address #define MAX_APP_SIZE (uint32_t)0x7000 //the max size of software is 28K #define MAX_APPPAGE_NUM 28 #define NVIC_VectTab_FLASH ((uint32_t)0x08000000) //parameters position uint32_t FLASH_Pages_Calculate(uint32_t Size); uint32_t FLASH_Prepare( uint32_t Address, uint32_t Len); void FLASH_Read( uint32_t Address, uint8_t *Readbuff, uint32_t Len); uint32_t FLASH_Write( uint32_t Address, const uint8_t* pData, uint32_t Len); void FLASH_Dis_WriteProt_Pages(void); Ô´Âë/ºËÐİå/Src/OnChipDevices/Usart.c
@@ -1,62 +1,5 @@ #include "Usart.h" //void Usart_Init(void) //{ // USART_InitTypeDef USART_InitStructure; // GPIO_InitTypeDef GPIO_InitStructure; // // /* Enable GPIO clock */ // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); // /* Enable USART clock */ // RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // // /* Configure USART Tx as alternate function push-pull */ // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // GPIO_InitStructure.GPIO_Pin = USART_TX_pin; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_Init(USART_GPIO, &GPIO_InitStructure); // /* Configure USART Rx as input floating */ // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // GPIO_InitStructure.GPIO_Pin = USART_RX_pin; // GPIO_Init(USART_GPIO, &GPIO_InitStructure); // /* USARTx configured as follow: // - BaudRate = 115200 baud // - Word Length = 8 Bits // - One Stop Bit // - No parity // - Hardware flow control disabled (RTS and CTS signals) // - Receive and transmit enabled // */ // USART_InitStructure.USART_BaudRate = BAUD_RATE ; // USART_InitStructure.USART_WordLength = USART_WordLength_8b; // USART_InitStructure.USART_StopBits = USART_StopBits_1; // USART_InitStructure.USART_Parity = USART_Parity_No; // USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // /* USART configuration */ // USART_Init(EXT_USART, &USART_InitStructure); // /* Enable USART */ // USART_Cmd(EXT_USART, ENABLE); //} //uint16_t Checksum_u16(uint8_t *pdata, uint32_t len) //{ // uint16_t sum = 0; // uint32_t i; // for(i = 0; i < len; i++) // sum += pdata[i]; // sum = ~sum; // return sum; //} /////////////////////////////////// #include <string.h> //æ°æ®åééååé EUART_Frame m_EUART_TxFrames[EUART_TX_FRM_SIZE]; //æ°æ®åé帧éå Ô´Âë/ºËÐİå/Src/OnChipDevices/Usart.h
@@ -3,8 +3,6 @@ #define __USART_H__ #include "stm32f10x.h" #include <string.h> //#define UART_GPIO_REMAP_ENABLE #ifdef UART_GPIO_REMAP_ENABLE Ô´Âë/ºËÐİå/Src/application/global_param.c
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ #include "global_param.h" #include "Flash.h" uint16_t g_com_map[COM_MAP_SIZE]; uint32_t save_com_map_to_flash(void) { uint32_t result = 0; __disable_irq(); result = FLASH_Prepare(FLASH_IAP_CTRL_MAP, (COM_MAP_SIZE<<1)); if(result) result = FLASH_Write(FLASH_IAP_CTRL_MAP, (const uint8_t*)g_com_map, (COM_MAP_SIZE<<1)); __enable_irq(); return result; } void parameter_init(void) { FLASH_Read(FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, (COM_MAP_SIZE<<1)); g_com_map[ALARM_DISTANCE] = 200; //é»è®¤æ¥è¦è·ç¦»200cm g_com_map[ALARM_DEV] = 0; } Ô´Âë/ºËÐİå/Src/application/global_param.h
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ #ifndef __GLOBAL_PARAM_H__ #define __GLOBAL_PARAM_H__ #include "stm32f10x.h" #define COM_MAP_SIZE 1024 /*---------------Map Definition-------------------*/ #define DEV_ROLE 0x10 //è¯¥è®¾å¤æ¯anchorè¿æ¯tag #define DEV_ID 0x11 //设å¤çIdå· #define COM_INTERVAL 0x12 //é讯é´é #define DEV_GROUP_ID 0x13 //é讯ç»ID #define ALARM_DEV 0x20 //æ¯åªä¸ªè®¾å¤æ¥è¦ #define ALARM_DISTANCE 0x21 //å°äºå¤å°è·ç¦»æ¥è¦ /*------------END Map Definition-------------------*/ extern uint16_t g_com_map[COM_MAP_SIZE]; extern uint32_t save_com_map_to_flash(void); extern void parameter_init(void); #endif Ô´Âë/ºËÐİå/Src/application/serial_at_cmd_app.c
@@ -1,21 +1,19 @@ #include "serial_at_cmd_app.h" #include "global_param.h" #include <string.h> uint8_t g_frame_data[MAX_FRAME_LEN] = {0}; uint8_t g_frame_data_len = 0; uint32_t g_alarm_dist = 200; uint8_t g_alarm_dev = 0; uint8_t m_frame_data[MAX_FRAME_LEN] = {0}; uint8_t m_frame_data_len = 0; void ParseFrame(void) { if(!memcmp(g_frame_data, "SET", 3)) if(!memcmp(m_frame_data, "SET", 3)) { g_alarm_dist = (g_frame_data[3]-'0')*1000 + (g_frame_data[4]-'0')*100 + (g_frame_data[5]-'0')*10 + (g_frame_data[6]-'0'); g_com_map[ALARM_DISTANCE] = (m_frame_data[3]-'0')*1000 + (m_frame_data[4]-'0')*100 + (m_frame_data[5]-'0')*10 + (m_frame_data[6]-'0'); } else if(!memcmp(g_frame_data, "DEV", 3)) else if(!memcmp(m_frame_data, "DEV", 3)) { g_alarm_dev = g_frame_data[3]-'0'; g_com_map[ALARM_DEV] = m_frame_data[3]-'0'; } } @@ -39,20 +37,20 @@ { s_usart_state = 3; s_data_pos = 0; g_frame_data_len = 0; m_frame_data_len = 0; } break; case 3: g_frame_data_len = s_data_pos; g_frame_data[s_data_pos++] = data; m_frame_data_len = s_data_pos; m_frame_data[s_data_pos++] = data; if(data == 0x0d) { s_usart_state = 4; } if(s_data_pos >= MAX_FRAME_LEN) //å¦æè¶ è¿æå¤§é¿åº¦ { g_frame_data_len = MAX_FRAME_LEN; m_frame_data_len = MAX_FRAME_LEN; ParseFrame(); s_usart_state = 0; } Ô´Âë/ºËÐİå/Src/application/serial_at_cmd_app.h
@@ -6,9 +6,6 @@ #define MAX_FRAME_LEN 50 extern uint32_t g_alarm_dist; extern uint8_t g_alarm_dev; void UsartParseDataHandler(uint8_t data); Ô´Âë/ºËÐİå/Src/main.c
@@ -9,6 +9,7 @@ #include "filters.h" #include "stm32f10x_it.h" #include "serial_at_cmd_app.h" #include "global_param.h" //#define WORK_MODE_TAG #define WORK_MODE_ANCHOR @@ -33,9 +34,10 @@ GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); } void Parameter_Init(void) void Program_Init(void) { Usart1ParseDataCallback = UsartParseDataHandler; parameter_init(); } /*! ------------------------------------------------------------------------------------------------------------------ @@ -52,7 +54,7 @@ LPFilter_Frac* p_Dis_Filter; Device_Init(); Parameter_Init(); Program_Init(); Dw1000_Init(); p_Dis_Filter = New_LP_Frac(0.7); @@ -69,13 +71,13 @@ //é¤UWBä¹å¤çå ¶ä»ä»£ç ... dis_after_filter = LP_Frac_Update(p_Dis_Filter, dist_cm); if(dis_after_filter <= g_alarm_dist) if(dis_after_filter <= g_com_map[ALARM_DISTANCE]) { // g_beep_off_time = (uint32_t)dis_after_filter * 10; // if(g_beep_off_time <= 0) // g_beep_off_time = 0; // g_beep_on_time = BEEM_ON_TIME_MS; switch(g_alarm_dev) switch(g_com_map[ALARM_DEV]) { case 0: BEEP2_ON; @@ -103,7 +105,7 @@ { // g_beep_on_time = 0; // g_beep_off_time = 0; switch(g_alarm_dev) switch(g_com_map[ALARM_DEV]) { case 0: BEEP2_OFF;