比如使用Jlink+Jflish
for
arm,连接好硬件电路后,打开JFlash
for
arm
软件,在工程设置里面选择好对应的STM32芯片,最红选择菜单中的“read
back”下的enter
chip,即可回读整片flash里面的内容了。
#include"config.h"#include"spi.h"
#define UART_BPS 9600
U8 Send_BUF[16] // UART0数据接收缓冲区
//数码管的输出对应值 从0~F
const U8 SEGMENT_DATA[16] = {
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E }
/********************************************************************************************************
*
* 函数名称:DataDisp(uint8 data,uint8 n)
*
* 功能描述:数据字符显示控制。显两位16进制数
*
* 入口参数:data 要显示的数据,取值0~15,n 选择第n个数码管,取值0~3
* 出口参数:无
*
* 全局变量: 无
* 调用模块: HC595_SendData(uint8 data)
*
********************************************************************************************************/
void DataDisp(U8 data,U8 n,U8 point)
{
if(point)
point=0x80
if(data<16 &&n<4)
{
Write_Byte_SPI((~SEGMENT_DATA[data])|point)// 显示高位
Write_Byte_SPI(~(1<<n)) // 显示低位
}
}
/****************************************************************************
**读取RTC的时间值,并将读出的时分秒值由串口发送到上位机显示。
****************************************************************************/
void SendTimeRtc(void)
{
U32 times
U8 bak
times = CTIME0 // 读取完整时钟寄存器0
bak = (times>>16)&0x1F // 取得时的值
Send_BUF[0] = bak/10+'0'
Send_BUF[1] = bak%10+'0'
Send_BUF[2] = ':'
DataDisp(bak/10,0,0)//显示小时
Delay(2)
DataDisp(bak%10,1,1)
Delay(4)
bak = (times>>8)&0x3F // 取得分的值
Send_BUF[3] = bak/10+'0'
Send_BUF[4] = bak%10+'0'
Send_BUF[5] = ':'
DataDisp(bak/10,2,0)//显示分钟
Delay(4)
DataDisp(bak%10,3,0)
Delay(2)
bak = times&0x3F // 取得秒的值
Send_BUF[6] = bak/10+'0'
Send_BUF[7] = bak%10+'0'
Send_BUF[8] = '\n'
}
/********************初始化实时时钟*******************************************/
void RTCInit(void)
{
YEAR = 2009 // 初化年
MONTH = 1 // 初化月
DOM = 4 // 初化日
HOUR = 12
MIN = 0
SEC = 0
CIIR = 0x01 // 设置秒值的增量产生一次中断
CCR = 0x11 // 使用独立振荡器,启动RTC
}
void PLL_Init(void)
{
PLLCON = 1
#if ((Fcclk / 4) / Fpclk) == 1
VPBDIV = 0
#endif
#if ((Fcclk / 4) / Fpclk) == 2
VPBDIV = 2
#endif
#if ((Fcclk / 4) / Fpclk) == 4
VPBDIV = 1
#endif
#if (Fcco / Fcclk) == 2
PLLCFG = ((Fcclk / Fosc) - 1) | (0 <<5)
#endif
#if (Fcco / Fcclk) == 4
PLLCFG = ((Fcclk / Fosc) - 1) | (1 <<5)
#endif
#if (Fcco / Fcclk) == 8
PLLCFG = ((Fcclk / Fosc) - 1) | (2 <<5)
#endif
#if (Fcco / Fcclk) == 16
PLLCFG = ((Fcclk / Fosc) - 1) | (3 <<5)
#endif
PLLFEED = 0xaa
PLLFEED = 0x55
while((PLLSTAT &(1 <<10)) == 0)
PLLCON = 3
PLLFEED = 0xaa
PLLFEED = 0x55
}
/****************************************************************************
**主函数:读取实时时钟的值,并从串口发送出去。
****************************************************************************/
void main(void)
{
IO0DIR = LED2CON // 设置LED1控制口为输出,其它I/O为输入
U8 SEC_tmp
Init_SPI()
PLL_Init()
U1FCR = 0x01//使能FIFO
RTCInit() //初始化RTC
while (1 )
{
SendTimeRtc()//读取时钟值,并向数码管发送数据显示
if(SEC_tmp!=Send_BUF[7])
{
SEC_tmp=Send_BUF[7]
if ((IO0SET &LED2CON) == 0)
IO0SET = LED2CON //关闭LED
else
IO0CLR = LED2CON
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)