"); //-->
#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);
FLASH_Unlock();
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
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
模拟卡拉OK伴唱放大电路
真空炉温度模糊PID复合控制
宽带短波放大电路
ICCAD观察之一:“反内卷”之前请先放弃“国产替代”
完全自动化智能水族箱系统设计
OPA541AP构成的音频功率放大电路
可编程控制器EDA教程 09
一种新的PID参数自整定算法在合成氨装置中的应用
围绕罗唯仁 台积电会跟英特尔对簿公堂吗?
DLP技术如何推动下一波包装创新?
[求助]大力求助!!!关于如何选择图像转发的芯片
艾德克斯持续助力高校电力电子大赛:赛道全新升级,多维支持激发创新活力
更安全的自动驾驶车辆意味着要向他们提出正确的问题
ITECH新品SAS1100 太阳能阵列模拟器软件发布:100通道集中控制,实时监测
演示广受欢迎的NEC红外协议
50W高保真音频集成功放电路(TDA1514A)
eastjtag驱动问题,在线等
求助:关于入口点的问题
可编程控制器EDA教程 12
可编程控制器EDA教程 11
招硬件工程师、软件工程师、应用工程师
STM32V8如何利用FD-SOI和相变存储器
有关LMI的求解及仿真实现
可编程控制器EDA教程 13
共同揭发星华电子这个大骗子
300W高保真功率放大电路
超大型芯片家族为纪念Intel 4004 CPU诞生54周年而集结——4001 ROM、4002内存和4003移位寄存器在重建版的Busicom计算器中亮相
可编程控制器EDA教程 10
一种基于蚁群算法的最优非线性PID控制器的设计
一种基于自调整因子模糊_PID复合控制器的设计