stm32 Flash读写[库函数]
#include "stm32f10x.h"
#include "stdio.h"
#define? PRINTF_ON? 1
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);
u32 count=0;
u16 data[5]={0x0001,0x0002,0x0003,0x0004,0x0005};
int main(void)
{
? ?RCC_Configuration();
?GPIO_Configuration();
?USART_Configuration();
?RCC_HSICmd(ENABLE);//Enables or disables the Internal High Speed oscillator (HSI).
?FLASH_Unlock(); /* Unlocks the FLASH Program Erase Controller.*/
/*將flash三個標志位全清*/
?FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
?FLASH_ErasePage(0x8002000);
?while(count < 5)
?{
??FLASH_ProgramHalfWord((0x8002000 +count*2),data[count]);? //flash? 為一個字節存儲,16位數據必須地址加2
??count++;
?
?}
?FLASH_Lock();
?count = 0;
?printf("\r\n The Five Data Is : \r\n");
?while(count < 5)
?{
??
??printf("\r %d \r",*(u8 *)(0x8002000 + count*2));?? //讀取方法
??count++;
?
?}
?while(1);
?
}
void GPIO_Configuration(void)
{
?GPIO_InitTypeDef?GPIO_InitStructure;
??GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;???
? ?GPIO_Init(GPIOA , &GPIO_InitStructure);?
?
? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;???
? ?GPIO_Init(GPIOA , &GPIO_InitStructure);?
}
void RCC_Configuration(void)
{
?/* 定義枚舉類型變量 HSEStartUpStatus */
?ErrorStatus HSEStartUpStatus;
? ?/* 復位系統時鐘設置*/
? ?RCC_DeInit();
? ?/* 開啟HSE*/
? ?RCC_HSEConfig(RCC_HSE_ON);
? ?/* 等待HSE起振并穩定*/
? ?HSEStartUpStatus = RCC_WaitForHSEStartUp();
?/* 判斷HSE起是否振成功,是則進入if()內部 */
? ?if(HSEStartUpStatus == SUCCESS)
? ?{
??? ?/* 選擇HCLK(AHB)時鐘源為SYSCLK 1分頻 */
??? ?RCC_HCLKConfig(RCC_SYSCLK_Div1);?
??? ?/* 選擇PCLK2時鐘源為 HCLK(AHB) 1分頻 */
??? ?RCC_PCLK2Config(RCC_HCLK_Div1);?
??? ?/* 選擇PCLK1時鐘源為 HCLK(AHB) 2分頻 */
??? ?RCC_PCLK1Config(RCC_HCLK_Div2);
??? ?/* 設置FLASH延時周期數為2 */
??? ?FLASH_SetLatency(FLASH_Latency_2);
??? ?/* 使能FLASH預取緩存 */
??? ?FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
??? ?/* 選擇鎖相環(PLL)時鐘源為HSE 1分頻,倍頻數為9,則PLL輸出頻率為 8MHz * 9 = 72MHz */
??? ?RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
??? ?/* 使能PLL */?
??? ?RCC_PLLCmd(ENABLE);
??? ?/* 等待PLL輸出穩定 */
??? ?while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
??? ?/* 選擇SYSCLK時鐘源為PLL */
??? ?RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
??? ?/* 等待PLL成為SYSCLK時鐘源 */
??? ?while(RCC_GetSYSCLKSource() != 0x08);
? ?}?
? ?/* 打開APB2總線上的GPIOA時鐘*/
? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);
?//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
?//RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
?//RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP|RCC_APB1Periph_WWDG, ENABLE);
??
}
?
void USART_Configuration(void)
{
?USART_InitTypeDef USART_InitStructure;
?USART_ClockInitTypeDef USART_ClockInitStructure;
?USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
?USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
?USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
?USART_ClockInit(USART1 , &USART_ClockInitStructure);
?USART_InitStructure.USART_BaudRate = 9600;
?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_Init(USART1,&USART_InitStructure);
??USART_Cmd(USART1,ENABLE);
}
#if? PRINTF_ON
int fputc(int ch,FILE *f)
{
?USART_SendData(USART1,(u8) ch);
?while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
?return ch;
}
#endif
總結
以上是生活随笔為你收集整理的stm32 Flash读写[库函数]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盒子模型与DOCTYPE
- 下一篇: [转]Windows 7 蓝屏后获取 M