打印

各位路过的帮忙看看--SRAM读写问题

[复制链接]
2403|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
h1246722755|  楼主 | 2013-5-19 11:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的程序Write-addr和Read-Addr不是相同的,每次从SRAM取出的数据要处理完之后才能取出下一条数据,而数据写入SRAM比较快。
我在串口里面输入一串数据 ,(接收的都是8位的,我将它转成16位的,就是说每来两个数据就进行一次写入SRAM的操作)
u32 Write_addr=0x8000 ;                 /*定义写的地址*/
u32 Read_addr=0x8000 ;                 /*定义读的地址*/
u16 ReadData[6];
u16 WriteData[6];
unsigned char RxBuffer[6];           //接收数组
int RxCounter,TxCounter;
void USART1_IRQHandler(void)                                                                            //串口1中断处理函数
{
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)                                //检测是否是接收中断
  {        
      RxBuffer[RxCounter++] = USART_ReceiveData(USART1);
        if(RxCounter==2)
        {RxCounter=0;
         WriteData[0]=RxBuffer[0];WriteData[0]<<=8;WriteData[0]|=RxBuffer[1];//两个8位的数组合为一个16位数                                
        FSMC_SRAM_Init();        /*配置与SRAM连接的FSMC BANK1 NOR/SRAM3*/
        FSMC_SRAM_WriteBuffer(WriteData,Write_addr,1);/*将数据写入到SRAM中。WRITE_ADDR:写入的起始地址*/
        Write_addr+=2;         
        }
  }  
  if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)                           //检测是否是发送中断
  {   
     USART_SendData(USART1,ReadData[TxCounter++]);
    if(TxCounter ==6)                                                           //如果发送数据量等于总数据量
    {                                                                                   
          USART_ITConfig(USART1, USART_IT_TXE, DISABLE);                           //关闭串口发送中断,停止发送
          TxCounter=0;                                                                                                   //发送计数器清零
    }   
  }
}
SRAM里数据的读出由外部中断0控制,我预想的是每按 一次EXTI0键,就进行一次SRAM读操作,并且每次读六个数据(下面的程序编写需要六个数据),外部中断同时控制串口的发送中断,每读一次SRAM,串口发送中断使能,在串口调试窗口显示读出的数据(低八位),验证是否正确发送。
void EXTI0_IRQHandler(void)
{  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  {  
    EXTI_ClearITPendingBit(EXTI_Line0);        
    FSMC_SRAM_ReadBuffer(ReadData,Read_addr,6); /*从SRAM中读回数据。READ_ADDR:读出数据的起始地址*/        
    ReadData+=12;
    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);                        //打开串口1发送中断,打开后会立即执行中断发送操作
   }
}

程序调试的时候,每次按外部中断0,要么调试窗口没有数据显示,要么显示的数据压根不是我发送的数据,我想问一下我的程序思想是不是错的?我调试很久了,最大的错误还是在FSMC_SRAM_ReadBuffer(ReadData,Read_addr,6)这句话,窗口没有数据显示,我怀疑程序就卡在这句话,数据乱显示,原因我不知道,就这么一句话,我都不知道怎么改程序了!!
沙发
hawksabre| | 2013-5-19 15:40 | 只看该作者
楼主   帮你顶一个   STM的芯片不是很擅长   对不住   顶一个   

使用特权

评论回复
板凳
hawksabre| | 2013-5-19 15:42 | 只看该作者
这一块你仔细查一查寄存器   看看哪边设置错误   多看看技术手册   这个很重要   另外   使用单步调试   应该在寻找bug时比较有帮助

使用特权

评论回复
地板
airwill| | 2013-5-19 16:07 | 只看该作者
这是调速器的问题. 以前有帖子提到这个问题的

使用特权

评论回复
5
h1246722755|  楼主 | 2013-5-19 16:51 | 只看该作者
跪求指导啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝