OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5276|回复: 8

spi 频率问题

[复制链接]

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
发表于 2013-7-20 19:07:28 | 显示全部楼层 |阅读模式
 我的芯片的型号是stm32f103vct6   硬件上没有外接晶振 如何把spi  的频率降为0.5MHZ ? 高手求救   万分感谢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-20 21:18:12 | 显示全部楼层
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
 楼主| 发表于 2013-7-21 15:21:18 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
已经分了 还是得不到0.5M  想要的是很准确的0.5M
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-21 20:23:31 | 显示全部楼层
降频了,设置频率为64Mhz,然后SPI的频率设置128分频,拿得到的SPI频率不就是500Khz么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
 楼主| 发表于 2013-7-22 15:19:02 | 显示全部楼层
原子大哥你好,我现在遇到了一个问题,还请原子大哥指点指点。我需要存入二百多个的数据,现在我现在为每一各变量都指定了以一个地址(以3各变量为例子,定义的三个地址分别是0x08010000,0x08010002,0x08010004),进行写操作的时候我按照解锁、擦写(页擦除)、上锁、读取。可是我在写入第二个变量的后,再去读第一个数据,数据不存在了,是被第二次写时擦除了,和才能补把先前写的数据,直接使用你们的例程可以吗,不能的话大概怎么修改一下阿?我的测试代码如下,请原子大哥帮帮忙。

#include "stm32f10x.h"
#define   saveaddress1  0x08010000
#define   saveaddress2  0x08010002
#define   saveaddress3  0x08010004

u8 value1=123;
u8 value2=10;
u8 value3=90;


//读取指定地址中的内容
u16 STMFLASH_ReadHalfWord(u32 faddr)
{
return *(vu16*)faddr; 
}
#if STM32_FLASH_WREN //如果使能了写 STM32_FLASH_WREN是1的宏定义  
//从指定地址开始写入指定长度的数据
//WriteAddr:起始地址(此地址必须为2的倍数!!)
//pBuffer:数据
 
void STMFLASH_Write(u32 WriteAddr,u16 pBuffer)
{
          FLASH_Unlock();
          FLASH_ErasePage(WriteAddr);
          FLASH_ProgramHalfWord(WriteAddr,pBuffer);
          FLASH_Lock();//上锁
}
#endif

u16 va1,va2,va3;
int main(void)
{

  STMFLASH_Write(saveaddress1,value1);
  va1=STMFLASH_ReadHalfWord(saveaddress1);

  STMFLASH_Write(saveaddress2,value2);
  va2=STMFLASH_ReadHalfWord(saveaddress2);
  va1=STMFLASH_ReadHalfWord(saveaddress1);

 STMFLASH_Write(saveaddress3,value3);
 va3=STMFLASH_ReadHalfWord(saveaddress3);
 va2=STMFLASH_ReadHalfWord(saveaddress2);
 va1=STMFLASH_ReadHalfWord(saveaddress1);
  
  return 0;
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-22 15:56:46 | 显示全部楼层
直接用给我们的例程吧。
不过这么多数据,你是不是要频繁修改啊?
很折寿的啊。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
 楼主| 发表于 2013-7-23 09:50:25 | 显示全部楼层
修改的次数不是很多,直接使用例程不做其它处理吗?需要处理的数据不能直接全部存入,是在程序运行过程中
一个一个的单独存入的,所以我给每一个变量都指定了一个地址。所仪每一次存入一个数据都必须调用一次例程中的写函数。
如:
#define saveaddress1 0x08010000
#define saveaddress2 0x08010002
u16 pBuffer[1];
u16 size;
u8 value ;u16 value1;
……
……
pBuffer[0]=value;
size=sizeof(pBuffer)/sizeof(pBuffer[0]);

STMFLASH_Write(saveaddress1,pBuffer,size);

……
……
……
pBuffer[0]=value1;
size=sizeof(pBuffer)/sizeof(pBuffer[0]);

STMFLASH_Write(saveaddress2,pBuffer,size);

例程不做任何修改,这样写如数据可以吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-23 10:38:36 | 显示全部楼层
回复【7楼】catbal:
---------------------------------
可以
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
 楼主| 发表于 2013-7-25 09:36:28 | 显示全部楼层
谢谢,大哥。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-16 16:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表