/************************************************************
**实验名称:
**功能:
**注意事项:
**作者:
*************************************************************/
#include "STM32Lib\\\\\\\\\\\\\\\\stm32f10x.h"
#include "hal.h"
#define FLASH_ADR 0x08008000 //要写入数据的地址
#define FLASH_DATA 0x5a5a5a5a //要写入的数据
int main(void)
{
u32 tmp;
ChipHalInit(); //片内硬件初始化
ChipOutHalInit(); //片外硬件初始化
//判断此FLASH是否为空白
tmp=*(vu32*)(FLASH_ADR);
if(tmp==0xffffffff)
{
FLASH_Unlock(); //解锁flash编写擦除控制器
FLASH_ProgramWord(FLASH_ADR,FLASH_DATA);//在指定的地址写一个字
FLASH_Lock(); //锁定flash编写擦除控制器
USART1_Puts("kong ,has writen\\\\\\\\r\\\\\\\\n");
LED2_OFF;
}
else if(tmp==FLASH_DATA)
{
USART1_Puts("read right\\\\\\\\r\\\\\\\\n");
LED3_OFF;
}
else
{
USART1_Puts("read error\\\\\\\\r\\\\\\\\n");
FLASH_Unlock();//解锁flash编写擦除控制器
FLASH_ErasePage(FLASH_ADR);//擦除flash的一个页面
FLASH_Lock(); //锁定flash编写擦除控制器
USART1_Puts("has clear error address!\\\\\\\\r\\\\\\\\n");
LED4_OFF;
}
for(;;)
{
}
}
关键字:STM32 IAP
引用地址:
STM32 IAP(对flash进行读写)
推荐阅读最新更新时间:2024-11-23 10:31
STM32入门系列-位带操作介绍
向大家介绍 STM32F1 的位带操作,让 STM32 的位操作和 51 单片机的位操作一样简单。 位带操作 在学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机 IO 口进行位定义。但是 STM32 没有这样的关键字,而是通过访问位带别名区来实现。即将每个比特位膨胀成一个 32 位字,当访问这些字的时候就达到了访问比特的目的。比方说 BSRR 寄存器有 32 个位,那么可以映射到 32 个地址上,当我们去访问这 32 个地址就达到访问 32 个比特的目的。 STM32F1 中有两个区域支持位带操作,一个是 SRAM 区的最低 1MB 范围,一个是片内外设区的最低 1MB 范围(APB1、APB2、
[单片机]
STM32 UART2程序--端口重映射
USART1程序很多,看看USART2程序。注意红色部分,首先要使能相关端口的时钟。 因为USART2可以映射成不同的端口,所以要端口映射。 结合你自己的开发板,设置正确的映射口.(正点原子的是PA03PA02.) STM32F103ZE默认的USART2就是PA03PA02,如果配置映射,USART2端口是PD05PD06了。 程序在正点原子开发板SRAM中调试通过,开发环境IAR5.30. void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O¿ú3õê¼»ˉ½á11ìå NVIC_InitTypeDef
[单片机]
STM32下SPI模式通过MAX7219驱动8位数码管显示模块
借鉴的地方: 1、正点原子的“ALIENTEK MINISTM32 实验20 SPI实验” 2、 STM32 硬件SPI max7219 8位数码管显示模块 http://www.openedv.com/posts/list/46179.htm 工具: STM32F103RCT6开发板;MAX7219 8位数码管显示模块: 数码管模块电路图:(店家https://item.taobao.com/item.htm?spm=a1z09.2.0.0.FiSjlX&id=41059249086&_u=cjnajni5a96提供) MAX7219中文说明可以借鉴: http://wenku.baidu.co
[单片机]
STM32的ADC1采集多条通道 可以不使用DMA功能吗?
类似的问题 为什么我采集5条通道的电压,而采集到的值却都是第一条的呢? 我什么时候需要使用DMA功能? Ⅰ 关于ADC的一些知识 STM32的ADC是一种12位逐次逼近型的模拟数字转换器。它有多达18条通道,可测量16个外部和2个内部信号源。 各通道的A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器ADC_DR中。 其实就是说,一个ADC,可检测18条通道,我们外接的只有16条。而结果只保存在一个寄存器ADC_DR中。 要使用ADC1采集多条通道,那么就需要对采集的通道进行分组排序。STM32的ADC可以把转换组织成两组:规则组和注入组。 假如我们采集的通道按照如下顺
[单片机]
stm32 总线与内存分布
1、总线 系统结构 系统包括一个由多个互相连接的32位AHB总线组成的矩阵 8个主总线 – Cortex-M4 with FPU core I-bus, D-bus and S-bus – DMA1 memory bus – DMA2 memory bus – DMA2 peripheral bus – Ethernet DMA bus – USB OTG HS DMA bus 7个从总线: – Internal Flash memory ICode bus – Internal Flash memory DCode bus – Main internal SRAM1 (112 KB
[单片机]
关于STM32莫名死机的一些问题记录
问题描述 ZET6跑了ucosII系统,在运行过程中有时会出现死机的情况,经过硬件调试发现,是进入延时的时候导致的这个问题,延时函数是没有问题的,而且这个问题是偶尔出现 问题排查 死机之后指针指向了硬件错误中断,初步猜测是因为栈溢出,因为跑了系统,并且函数的嵌套层数比较多,导致栈内存不够,进入了硬件错误中断 解决方法 将函数分离出来,减少函数嵌套,因为每一个函数都会分配单独的内存空间,所以多层的函数嵌套就会有多个函数空间,解决办法就是减少函数嵌套,这样当一个函数执行完弹栈之后,它的内存空间就会被释放。 其他资料 使用keil编译程序的时候,会显示程序对内存的占用情况,其含义如下 Code为程序代码部分
[单片机]
再造STM32---第一部分:如何正规的安装KEIL5?
获取本文所有安装包和注册机方式: 1、CSDN下载: https://download.csdn.net/download/qq_38351824/10943718 2、可以关注点赞并在下方评论,我给你邮箱发过去。 3、关注微信公众号下载: ① 关注微信公众号:Tech云 ② 一、温馨提示: 1、 安装路径不能带中文,必须是英文路径 2、 安装目录不能跟 51 的 KEIL 或者 KEIL4 冲突,三者目录必须分开 3、 KEIL5 的安装比起 KEIL4 多了一个步骤,必须添加 MCU 库,不然没法使用。 4、 如果使用的时候出现莫名其妙的错误,先百度查找解决方法,莫乱阵脚。 二、获取 KEIL5
[单片机]
基于STM32 MCU的太阳能-LED街灯解决方案
随着化石类能源的日益减少,以及温室气体的过度排放导致全球变暖问题越来越受到重视,人们一方面在积极开发各类可再生新能源,另一方面也在倡导节能减排的绿色环保技术。太阳能作为取之不尽、用之不竭的清洁能源,成为众多可再生能源的重要代表;而在照明领域,寿命长、节能、安全、绿色环保、色彩丰富、微型化的LED固态照明也已被公认为世界一种节能环保的重要途径。太阳能-LED街灯同时整合了这两者的优势,利用清洁能源以及高效率的LED实现绿色照明。 本文介绍的太阳能-LED街灯方案,能自动检测环境光以控制路灯的工作状态,最大功率点追踪(MPPT)保证最大太阳能电板效率,恒电流控制LED,并带有蓄电池状态输出以及用户可设定LED工作时间等功能。
[单片机]