第一版代码,为了在EEPROM保存参数的时候走STM32的CRC,让Codex修改了一下,现在的效果是无法存储,codex表示原因是CRC方法不同,修改到一半今天的额度使用完了,有待后续解决CRC的bug
This commit is contained in:
61
MyDriver/DWT.c
Normal file
61
MyDriver/DWT.c
Normal file
@@ -0,0 +1,61 @@
|
||||
#include "DWT.h"
|
||||
|
||||
// 寄存器基地址
|
||||
#define DWT_CR (*(uint32_t *)0xE0001000)
|
||||
#define DWT_CYCCNT (*(uint32_t *)0xE0001004)
|
||||
#define DEM_CR (*(uint32_t *)0xE000EDFC)
|
||||
|
||||
// 定义需使能位
|
||||
#define DEM_CR_TRCENA (1 << 24)
|
||||
#define DWT_CR_CYCCNTENA (1 << 0)
|
||||
|
||||
// DWT init
|
||||
void DWT_init(void)
|
||||
{
|
||||
DEM_CR |= (uint32_t)DEM_CR_TRCENA;
|
||||
DWT_CYCCNT = (uint32_t)0u;
|
||||
DWT_CR |= (uint32_t)DWT_CR_CYCCNTENA;
|
||||
}
|
||||
// get DWT count
|
||||
uint32_t DWT_TS_GET(void)
|
||||
{
|
||||
return ((uint32_t)DWT_CYCCNT);
|
||||
}
|
||||
|
||||
// 使用DWT延时time_us微秒
|
||||
void DWT_delay_us(uint32_t time_us)
|
||||
{
|
||||
uint32_t old_counter, current_counter;
|
||||
uint32_t delay_us;
|
||||
|
||||
old_counter = DWT_TS_GET();
|
||||
current_counter = DWT_TS_GET();
|
||||
delay_us = 0;
|
||||
while (delay_us < time_us)
|
||||
{
|
||||
current_counter = DWT_TS_GET();
|
||||
if (current_counter > old_counter)
|
||||
delay_us = (current_counter - old_counter) / (SystemCoreClock / 1000000);
|
||||
else
|
||||
delay_us = (current_counter + 0XFFFFFFFF - old_counter) / (SystemCoreClock / 1000000);
|
||||
}
|
||||
}
|
||||
|
||||
// 使用DWT延时time_ms毫秒
|
||||
void DWT_delay_ms(uint32_t time_ms)
|
||||
{
|
||||
uint32_t old_counter, current_counter;
|
||||
uint32_t delay_ms;
|
||||
|
||||
old_counter = DWT_TS_GET();
|
||||
current_counter = DWT_TS_GET();
|
||||
delay_ms = 0;
|
||||
while (delay_ms < time_ms)
|
||||
{
|
||||
current_counter = DWT_TS_GET();
|
||||
if (current_counter > old_counter)
|
||||
delay_ms = (current_counter - old_counter) / (SystemCoreClock / 1000);
|
||||
else
|
||||
delay_ms = (current_counter + 0XFFFFFFFF - old_counter) / (SystemCoreClock / 1000);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user