2672|2

384

帖子

2

TA的资源

纯净的硅(初级)

楼主
 

富士通FRAM心得提交 ---- 同样的程序,在STM32上不能运行 在MSP430上能运行 [复制链接]

本帖最后由 upc_arm 于 2014-1-6 23:22 编辑

同样的程序,在STM32上不能运行 在MSP430上能运行
两个代码是非常的相似,但是MSP430里读出 状态寄存器=0x02,STM32读出的数据会发生变化,不知道是什么原因。
下面分别贴代码,希望大家能指点指点

MSP430下的程序,参考别人的
  1. #define MB85SR64_DLY        30

  2. #define MB85RS64_PORT_IN    P2IN
  3. #define MB85RS64_PORT_OUT   P2OUT
  4. #define MB85RS64_CS         BIT0
  5. #define MB85RS64_WP         BIT5
  6. #define MB85RS64_SCK        BIT3
  7. #define MB85RS64_SI         BIT2
  8. #define MB85RS64_SO         BIT1
  9. #define SET_MB85RS64_CS     MB85RS64_PORT_OUT|=MB85RS64_CS
  10. #define SET_MB85RS64_WP     MB85RS64_PORT_OUT|=MB85RS64_WP
  11. #define SET_MB85RS64_SCK    MB85RS64_PORT_OUT|=MB85RS64_SCK
  12. #define SET_MB85RS64_SI     MB85RS64_PORT_OUT|=MB85RS64_SI
  13. #define SET_MB85RS64_SO     MB85RS64_PORT_OUT|=MB85RS64_SO
  14. #define CLR_MB85RS64_CS     MB85RS64_PORT_OUT&=~MB85RS64_CS
  15. #define CLR_MB85RS64_WP     MB85RS64_PORT_OUT&=~MB85RS64_WP
  16. #define CLR_MB85RS64_SCK    MB85RS64_PORT_OUT&=~MB85RS64_SCK
  17. #define CLR_MB85RS64_SI     MB85RS64_PORT_OUT&=~MB85RS64_SI
  18. #define CLR_MB85RS64_SO     MB85RS64_PORT_OUT&=~MB85RS64_SO
  19. #define Read_MB85RS64_SO    (MB85RS64_PORT_IN&MB85RS64_SO)==MB85RS64_SO

  20. //寄存器相关
  21. #define MB85RS64_WREN       0x06//Set Write Enable Latch 0000 0110
  22. #define MB85RS64_WRDI       0x04//Reset Write Enable Latch 0000 0100B
  23. #define MB85RS64_RDSR       0x05//Read Status Register 0000 0101B
  24. #define MB85RS64_WRSR       0x01//Write Status Register 0000 0001B
  25. #define MB85RS64_READ       0x03//Read Memory Code 0000 0011B
  26. #define MB85RS64_WRITE      0x02//Write Memory Code 0000 0010B


  27. void Write_data(unsigned int address,unsigned char * data,unsigned int number)
  28. {
  29.     unsigned int temp_address=0;
  30.     unsigned char i=0;
  31.     //Set Write Enable Latch
  32.     CLR_MB85RS64_CS;
  33.     Write(MB85RS64_WREN);
  34.     SET_MB85RS64_CS;
  35.     temp_address=address&0x1FFF;
  36.     //Write Memory Code
  37.     CLR_MB85RS64_CS;
  38.     Write(MB85RS64_WRITE);
  39.     Write((temp_address>>8)&0xFF);
  40.     Write(temp_address&0xFF);
  41.     for(i=0;i<number;i++)
  42.     {
  43.        Write(* data);
  44.        data++;
  45.     }
  46.     SET_MB85RS64_CS;
  47. }
  48. void Read_data(unsigned int address,unsigned char * data,unsigned int number)
  49. {
  50.     unsigned int temp_address=0;
  51.     unsigned char i=0;
  52.     temp_address=address&0x1FFF;
  53.     //Read Memory Code
  54.     CLR_MB85RS64_CS;
  55.     Write(MB85RS64_READ);
  56.     Write((temp_address>>8)&0xFF);
  57.     Write(temp_address&0xFF);
  58.     for(i=0;i<number;i++)
  59.     {
  60.        * data=Read();
  61.        data++;
  62.     }
  63.     SET_MB85RS64_CS;
  64. }


  65. void Init_PORT(void)
  66. {
  67.   P2OUT = 0x00;                             P2SEL  &= 0xD0;
  68.   P2SEL2 &= 0xD0;
  69.   
  70.   P2DIR |= BIT0 + BIT2 + BIT3 + BIT5;                     //
  71.   
  72.   P2DIR &= ~BIT1;                     //
  73.   P2REN |= BIT1;

  74. }


  75. void main(void)
  76. {
  77.   volatile unsigned int i;
  78.   char uart_tx_buf[30];
  79.   unsigned char rd_data;
  80.   unsigned char rd;
  81.   unsigned char rd_test = 0;
  82.   
  83.   WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer

  84. Init_PORT();
  85.   Init_uart0();
  86.   sendStr("Init\n");
  87.   
  88.   Init_PORT();
  89.   
  90.   while(1)
  91.   {
  92.     //Set Write Enable Latch
  93.     CLR_MB85RS64_CS;
  94.     Write(MB85RS64_WREN);
  95.     SET_MB85RS64_CS;
  96.    
  97.     //Read
  98.     CLR_MB85RS64_CS;
  99.     Write(MB85RS64_RDSR);
  100.     rd_data=Read();
  101.     SET_MB85RS64_CS;
  102.     sprintf(uart_tx_buf,"stat1==0x%02X\n",rd_data);
  103.     sendStr(uart_tx_buf);
  104.    
  105.    
  106.     //Set Write Enable Latch
  107.     CLR_MB85RS64_CS;
  108.     Write(MB85RS64_WRDI);
  109.     SET_MB85RS64_CS;
  110.    
  111.     //Read
  112.     CLR_MB85RS64_CS;
  113.     Write(MB85RS64_RDSR);
  114.     rd_data=Read();
  115.     SET_MB85RS64_CS;
  116.     sprintf(uart_tx_buf,"stat1==0x%02X\n",rd_data);
  117.     sendStr(uart_tx_buf);
  118.     DelayXms(1000);
  119.   }
  120. }
复制代码


STM32下的程序:
  1. #define CLR_MB85RS64_CS                                GPIO_WriteBit(GPIOC, SPI_MB85RS64_CS, Bit_RESET)
  2. #define SET_MB85RS64_CS                                GPIO_WriteBit(GPIOC, SPI_MB85RS64_CS, Bit_SET)
复制代码
  1. void MySPI_GPIO_Init(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         
  5.         RCC_APB2PeriphClockCmd(SPI_GPIO_RCC, ENABLE);
  6.         
  7.         GPIO_InitStructure.GPIO_Pin = SPI_SCK | SPI_MOSI;
  8.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  10.         
  11.         GPIO_Init(SPI_PORT, &GPIO_InitStructure);
  12.         
  13.         GPIO_InitStructure.GPIO_Pin = SPI_MISO;
  14.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  16.         //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  17.         
  18.         GPIO_Init(SPI_PORT, &GPIO_InitStructure);
  19.         
  20.         GPIO_SetBits(SPI_PORT, SPI_SCK | SPI_MOSI);
  21. }

  22. unsigned char Read(void)
  23. {
  24.   unsigned char i=0,data=0;
  25.   GPIO_WriteBit(SPI_PORT, SPI_SCK, Bit_RESET);
  26.   for(i=0;i<8;i++)
  27.   {
  28.      data<<=1;
  29.      GPIO_WriteBit(SPI_PORT, SPI_SCK, Bit_SET);;
  30.      DelayXus(MB85SR64_DLY);
  31.      //if(Read_MB85RS64_SO)
  32.                  if(GPIO_ReadInputDataBit(SPI_PORT, SPI_MISO))
  33.      {data|=1;}
  34.      GPIO_WriteBit(SPI_PORT, SPI_SCK, Bit_RESET);
  35.      DelayXus(MB85SR64_DLY);
  36.   }
  37.   return data;
  38. }
  39. void Write(unsigned char data)
  40. {
  41.   unsigned char i=0;
  42.   GPIO_WriteBit(SPI_PORT, SPI_SCK, Bit_RESET);
  43.   for(i=0;i<8;i++)
  44.   {
  45.     if((data&0x80)==0x80)
  46.     {GPIO_WriteBit(SPI_PORT, SPI_MOSI, Bit_SET);}
  47.     else
  48.     {GPIO_WriteBit(SPI_PORT, SPI_MOSI, Bit_RESET);}
  49.     data<<=1;
  50.     GPIO_WriteBit(SPI_PORT, SPI_SCK, Bit_SET);
  51.     DelayXus(MB85SR64_DLY);
  52.     GPIO_WriteBit(SPI_PORT, SPI_SCK, Bit_RESET);
  53.   }
  54. }

  55. MySPI_GPIO_Init();
  56.         MySPI_MB85RS64_CS_Init();
  57.         MySPI_MB85RS64_CS_H;
  58. while(1)
  59.   {
  60.     //Set Write Enable Latch
  61.     CLR_MB85RS64_CS;
  62.     Write(MB85RS64_WREN);
  63.     SET_MB85RS64_CS;
  64.    
  65.     //Read
  66.     CLR_MB85RS64_CS;
  67.     Write(MB85RS64_RDSR);
  68.     rd_data=Read();
  69.     SET_MB85RS64_CS;
  70.     printf("stat1==0x%02X\n",rd_data);
  71.    
  72.    
  73.     //Set Write Enable Latch
  74.     CLR_MB85RS64_CS;
  75.     Write(MB85RS64_WRDI);
  76.     SET_MB85RS64_CS;
  77.    
  78.     //Read
  79.     CLR_MB85RS64_CS;
  80.     Write(MB85RS64_RDSR);
  81.     rd_data=Read();
  82.     SET_MB85RS64_CS;
  83.     printf("stat2==0x%02X\n",rd_data);
  84.     DelayXms(1000);
  85.   }

复制代码

最新回复

Sur
好的把,版主来给你帮忙,哈哈,虽然版主没时间帮你看程序,但是帮你顶顶帖子还是可以的,  详情 回复 发表于 2014-1-9 12:28
点赞 关注
个人签名

I-Love-MCU

 
 

回复
举报

384

帖子

2

TA的资源

纯净的硅(初级)

沙发
 
自己顶一下
个人签名

I-Love-MCU

 
 
 

回复

1531

帖子

49

TA的资源

五彩晶圆(中级)

板凳
 
好的把,版主来给你帮忙,哈哈,虽然版主没时间帮你看程序,但是帮你顶顶帖子还是可以的,
个人签名NXP新年新气象大家一起嗨起来 + 恩智浦KW41Z有奖创意征集令高能来袭 +https://www.eeworld.com.cn/huodong/201611_NXPKW41ZActivity1/index.html
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表