stm32寄存器版能节省多少flash,使用STM32F107的GPIO驱动Nand Flash可不可行
来源:整理 编辑:亚灵电子网 2023-04-03 19:34:07
1,使用STM32F107的GPIO驱动Nand Flash可不可行
GPIO在输出方式时是同时往输入数据寄存器采样的;而在输入方式下 输出缓冲器被禁止,不会有输出。 所以要把第二条的输入配置删除才行。 另外:输出配置为开漏模式时,对输入数据寄存器的读访问可得到端口状态 ;输出配置为推挽式模式时,对输入...
2,stm32 flash 一页能存多少数据
有两种规格,1Kb和2Kb的,也就是1024字节和2048字节,一般来说内部flash大的采用2048字节一页,内部flash小的采用1024字节一页。你可以STM32F103系列为参考:小容量产品主存储块1-32KB, 每页1KB。中容量产品主存储块64-128KB, 每页1KB。大容量产品主存储块256KB以上, 每页2KB。互联型产品主存储块256KB以上, 每页2KB。

3,STM32内置FLASH保存掉电参数问题
如果数据不多,那可以用STM32的BKP寄存器保存数据啊,BKP有一些寄存器和RTC都用备份电池供电,数据写入其中是不会丢失的。比如,#define flashaddr_start 0x08006800写:u32 data = 0x20161109;flash_unlock();flash_erasepage(flashaddr_start);flash_programword(flashaddr_start,data);flash_lock();读:u32 data;data = *(u32*)flashaddr_start;你的产品上有锂电不,可以考虑用backup sram,但锂电不能完全没电,而且锂电得接BAT pin
4,stm32单片机主要优点有哪些
优点如下:1、STM32属于arm内核的一个版本,比传统的51单片机高级多了,有很多资源是51不具备的,如usb控制器。而且已经废除了机器周期什么的,速度不是51能比的。2、STM32单片机程序都是模块化的,接口相对简单些,因为它自身带好多功能,工作速度也快。而51的自身功能少,需要外围元件多,要求对电子熟悉。stm32单片机:在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列、互补型系列;新系列产品沿用增强型系列的72MHz处理频率。内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装。
5,stm32f030f4的FLASH能用来做eeprom吗可用多少
模拟EEPROM,就是你的数据需要更换,但不是很频繁更换的那种。就可以。如果是经常更换,每天更换几百几千次,那就还是用EEPROM。STM32F的NRST是异步复位脚。\r\n当NRST输入低电平的时候,MCU处于复位状态,重设所有的内部寄存器,及片内几十KB的SRAM。\r\n当NRST从低电平变高时,PC指针从0地址开始。\r\n但是复位的时候不会将STM32F片内RTC的寄存器以及后备存储器重置,因为...EEPROM 芯片和flash的特点都是断电数据保留,可以存放不同的数据。 EEPROM芯片容量小,芯片贵,但是在写入时不需要擦除,最小可写一个字节,读写的速度比较慢,但因为写起来方便,适用于常常修改的数据。 而flash芯片容量大,但是在写入时需要擦...
6,STM32比51单片机有什么优点
优点如下:1、STM32属于arm内核的一个版本,比传统的51单片机高级多了,有很多资源是51不具备的,如usb控制器。而且已经废除了机器周期什么的,速度不是51能比的。2、STM32单片机程序都是模块化的,接口相对简单些,因为它自身带好多功能,工作速度也快。而51的自身功能少,需要外围元件多,要求对电子熟悉。3、STM32互连型系列产品强化了音频性能,采用一个先进的锁相环机制,实现音频级别的I2S通信。结合USB主机或从机功能,STM32可以从外部存储器(U盘或MP3播放器)读取、解码和输出音频信号。4、 STM32 的运算速度大约是51单片机的几十倍吧,而且外围接口功能比51强大太多。STM32是基于ARM? Cortex? M 处理器内核的 32位闪存微控制器,为MCU用户开辟了一个全新的自由开发空间,并提供了各种易于上手的软硬件辅助工具。STM32 MCU融高性能、实时性、数字信号处理、低功耗、低电压于一身,同时保持高集成度和开发简易的特点。业内最强大的产品阵容,基于工业标准的处理器,大量的软硬件开发工具,让STM32单片机成为各类中小项目和完整平台解决方案的理想选择。按内核架构分为不同产品系列。
7,stm32的flash和stm8的flash的区别
我都用过,给你简单讲讲。操作:STM8比STM32简单,一样都可以用寄存器或者库的方式编写。价格:STM8几乎都在10块以内,STM32几乎都在10块以上。资料:STM8的资料很少,半年前到处找STM8的CAN资料,无果后上淘宝花了5块钱买了开发板资料,我看现在很多STM8的资料也跟上了,都带CAN了。如果STM8使用库,不像STM32有库的PDF资料可以查。但它有一个查询软件,你找到要用的函数后选择好参数,它会帮你自动生成函数,COPY到程序中就可以了。那个软件是针对STM8S的,而对于STM8L也只能仅供参考,具体函数名称还是校对下再使用。功能:STM8虽然小巧,但是该有的模块都有,串口、AD、IIC等。STM32可用模块会比STM8更多。总的来说:STM8就是低端的STM32。意法半导体的单片机非常简单,主要的不同就是它们都经常使用库文件来定义好了寄存器了。在原有的工程上进行修改就变得非常简单了。
8,关于STM32库函数问题
你说的是3.0以上的固件库吗? SystemInit()函数在主程序中被RCC_Configuration()函数调用,完成系统时钟的配置功能。我看过这个函数的具体内容,是直接操作寄存器来完成配置。如果使用stm32f10x_rcc.c文件中的函数来完成时钟配置,和SystemInit()的顺序和效果一样。 当然,为了保证兼容性,使低版本固件库写的程序运行,就还有stm32f10x_rcc.c存在,像早期版本的RCC_Configuration()函数就是使用这个文件中提供的函数来完成时钟配置的。 补充:是的,Systeminit()函数完成了时钟初始化的功能。另外systick的使用也变简单了,以前要几个函数完成初始化,现在只要一个就行。 你看看3.0版本固件system_stm32f10x.c中的代码是怎样的吧。其中是对RCC寄存器直接赋值操作,和stm32f10x_rcc.c中相关的函数作用一样。 如果在程序中要使用端口、外设等,由于这些东西需要时钟才能工作,所以还是需要stm32f10x_rcc.c中的函数来完成时钟的控制。一般不行必须要调用stm32f10x_rcc.c,systeminit()只是将系统的时钟帮你配置好,其实你也可以不调用它,你可以自己调用stm32f10x_rcc.c中的函数自己来配置,不过这样的话就要记得配置好flash的等待周期,两种方式之间没什么太大区别。另外一般你会需要开启外设的时钟或者其他一些功能就需要调用stm32f10x_rcc.c中的函数。还有如果你使用的是3.2.0以上的库的话,systeminit()其实不需要你自己调用,startup_stm32f10x_xx.s中有这样的代码reset_handler ldr r0, =systeminit意思就是上电(reset)后执行的第一段代码就是systeminit(),这是在main函数之前调用的,所以不需你自己再去调用了systeminit()在调用的时候要注意你自己板子上的外部晶振是多少,默认是25mhz,如果你板子上的晶振的不是这么大的话,你需要修改stm32f10x.h里面的hse_value 补充:system_stm32f10x.c里的函数的功能仅仅是完成系统时钟的配置,如果你不使用任何外设或者用系统时钟做其他用的话是可以不用stm32f10x_rcc.c stm32f10x_rcc.c中的函数不仅仅是完成分频倍频的功能,还有开启外设时钟,检测rcc中断,配置rtc时钟等功能,不是单单配置一个系统时钟那么简单
9,求STM32内部FLASH开辟成EEPROM寄存器版本程序
应该能用吧,好长时间没用过了/*文件名:flash.c作者:BJTU SY0702 YZ时间:2011,3,12功能:STM32的flash编程,注意要在config.h 中添加 #define _FLASH_PROG*/#include "includes.h"#include <stm32f10x_lib.h>/*flash的写函数:输入: u32 StartAddr flash起始地址 u32 *p_data 待写入数据指针 u32 size 写入数据的数量输出: 0:正确执行 非0:出错注意:输入数据一定是u32 的指针,即数据一定是按照4字节对齐写入的。 所以:size也是u32的个数(字节数的4分之一)*/int flash_write(u32 StartAddr,u32 *p_data,u32 size) volatile FLASH_Status FLASHStatus; u32 EndAddr=StartAddr+size*4; vu32 NbrOfPage = 0; u32 EraseCounter = 0x0, Address = 0x0; int i; int MemoryProgramStatus=1; //为一是通过 FLASH_Unlock(); NbrOfPage=((EndAddr-StartAddr)>>10)+1; //有多少个页被擦除 //清除所有已有标志 FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); //擦页 FLASHStatus=FLASH_COMPLETE; for(EraseCounter=0;(EraseCounter<NbrOfPage)&&(FLASHStatus==FLASH_COMPLETE);EraseCounter++) FLASHStatus=FLASH_ErasePage(StartAddr+(PageSize*EraseCounter)); } //开始写数据 Address = StartAddr; i=0; while((Address<EndAddr)&&(FLASHStatus==FLASH_COMPLETE)) FLASHStatus=FLASH_ProgramWord(Address,p_data[i++]); Address=Address+4; } //检验数据是否出错 Address = StartAddr; i=0; while((Address < EndAddr) && (MemoryProgramStatus != 0)) if((*(vu32*) Address) != p_data[i++]) MemoryProgramStatus = 0; return 1; } Address += 4; } return 0;}
10,STM32的最短延时能少于1us吗
完全是可以的,就看你实现的方式了,使用systick就不行,可以使用循环递减或定时器方式进行延时。我有一个你可以测试一下,前段时间搞项目刚调试出来的用库也可以用寄存器你看看能不能用的上/************************************************************************************* stm32f103vet6 通用定时器tim2精确延时1ms 实验程序** 固件库版本:3.5**************************************************************************************/#ifndef _tim2_h#define _tim2_h#include "tim2.h"volatile unsigned long count1ook; //延时全局变量/* * 嵌套向量控制器nvic配置子函数 */void nvic_initstructreadtempcmd(void) nvic_inittypedef nvic_initstruct; nvic_prioritygroupconfig(nvic_prioritygroup_0); //配置中断分组 nvic_initstruct.nvic_irqchannel = tim2_irqn; //配置中断线路 nvic_initstruct.nvic_irqchannelpreemptionpriority = 0; //配置抢占优先级为0 nvic_initstruct.nvic_irqchannelsubpriority = 0; //配置从占优先级为0 nvic_initstruct.nvic_irqchannelcmd = enable; //打开nvic使能 nvic_init(&nvic_initstruct); //初始化 /* * rcc外设时钟配置寄存器子函数 */void rcc_apb1periphreadtempycmd(void) rcc_apb1periphclockcmd(rcc_apb1periph_tim2 , enable); //打开tim2外时钟}/* * 定时器tim2寄存器配置子函数 */void tim2_initstructreadtempcmd(void) tim_timebaseinittypedef tim_timebaseinitstruct; tim_deinit(tim2); //初始化tim2为缺省值 tim_timebaseinitstruct.tim_period = (1 - 1); //配置arr自动重载寄存器 tim_timebaseinitstruct.tim_prescaler = (72 - 1); //配置psc时钟预分频 tim_timebaseinitstruct.tim_clockdivision = tim_ckd_div1; //配置时间分割值 tim_timebaseinitstruct.tim_countermode = 0x0000; //配置计数器向上计算 tim_timebaseinit(tim2, &tim_timebaseinitstruct); //初始化 tim_clearflag(tim2, tim_flag_update); //清除溢出中断标志 tim_itconfig(tim2, tim_it_update, enable); //打开中断溢出 tim_cmd(tim2, enable); //失能tim2定时器}/* * 带参数1ms延时子函数 */void delay_1us(unsigned long countlink) count1ook = countlink; while(count1ook != 0);}/* * 定时器tim2中断服务程序 */void tim2_irqhandler(void) tim_clearflag(tim2, tim_flag_update); //清除溢出中断标志 if(count1ook != 0x00) count1ook--; }}#endif/******************************************end****************************************/
文章TAG:
stm32寄存器版能节省多少flashstm32 寄存 寄存器