smxng

    1. [原创]STM8S207S8的已调试驱动 15/8139 stm32/stm8 2010-10-13
                                       #include "ioSTM8S207S8.h" #include "Includes.h" #include "Constants.h" #include "Functions.h" #include "Globals.h" /* Author: EighthArmy @ July.2010 */ #define FIRST_SECURITY_KEY        0xAE #define SECOND_SECURITY_KEY       0x56 #define ADD_EEPROM_S8             0x4000             /* STM8S207S8的CODE空间为64K,而EEPROM的大小为1536字节,即:3页 * 512节/页 */       /* EEPROM的KEY写入与FLASH的KEY正好相反 */ /***************************************************** @Fn: InitialFlashReg() @Br: 初始化闪存寄存器组 @Pa: 无 @Rt: 无 @Sp: 无 *****************************************************/ void InitialFlashReg( void ){   FLASH_CR1 = FLASH_CR1_RESET_VALUE;   FLASH_CR2 = FLASH_CR2_RESET_VALUE;   FLASH_NCR2 = FLASH_NCR2_RESET_VALUE;   FLASH_IAPSR &= ( uchar )(~( 1 << DUL ));    /* 清除只读DATA区解锁 */   FLASH_IAPSR &= ( uchar )(~( 1 << PUL ));    /* 清除程序区解锁 */ } /***************************************************** @Fn: UnlockFlash() @Br: 解锁存储器   @Pa: 存储器类型: 不是程序区就是只读数据区 @Rt: 无 @Sp: 2个密钥的操作序列正好相反   *****************************************************/ void UnlockFlash( uchar Type ){   if( Type == UNLOCK_FLASH_TYPE )       /* 解锁程序区 */     {     FLASH_DUKR = SECOND_SECURITY_KEY;     FLASH_DUKR = FIRST_SECURITY_KEY;       }   else                                  /* 解锁只读数据区 */     {     FLASH_DUKR = FIRST_SECURITY_KEY;     FLASH_DUKR = SECOND_SECURITY_KEY;     } } /***************************************************** @Fn: LockFlash() @Br: 锁定存储器 @Pa: 存储器类型:不是程序区就是只读数据区 @Rt: 无 @Sp: 无 *****************************************************/ void LockFlash( uchar Type ){   if( Type == UNLOCK_FLASH_TYPE )     {     FLASH_IAPSR &= ~( 1 << PUL );       }   else     {     FLASH_IAPSR &= ~( 1 << DUL );     } } /***************************************************** @Fn: InitialFlashReg() @Br: 写入一字节到指定只读数据区[EEPROM] @Pa: 指定EEPROM地址与数据内容 @Rt: 无 @Sp: 无 *****************************************************/ void WriteByteToFLASH( ulong Address, uchar Data ){   *(( __far uchar * ) Address ) = Data; } /***************************************************** @Fn: Write4BytToFlash() @Br: 写入4字节到指定EEPROM的连续4字节空间 @Pa: EEPROM地址与LONG型数据内容 @Rt: 无 @Sp: 数据写入方式为小端模式   *****************************************************/ void Write4BytToFlash( ulong Address, ulong Data ){     /* Enable Word Write Once */     FLASH_CR2 |= ( 1 << WPRG );     FLASH_NCR2 &= ( uchar )( ~( 1 << NWPRG ));     *((( __far uchar * )Address ) + 3 ) = *(( uchar * )( &Data )); /* Write one byte - from Highest address*/     *((( __far uchar * )Address ) + 2 ) = *(( uchar * )( &Data ) + 1 ); /* Write one byte*/     *((( __far uchar * )Address ) + 1 ) = *(( uchar * )( &Data ) + 2 ); /* Write one byte*/     *(( __far uchar * )Address ) = *(( uchar * )( &Data ) + 3 ); /* Write one byte - from higher address*/ } /***************************************************** @Fn: ReadByteEEPROM() @Br: 从EEPROM中读取1字节 @Pa: 指定EEPROM地址 @Rt: 读取的CHAR型内容 @Sp: 无 *****************************************************/ uchar ReadByteEEPROM( ulong Address ){   return(*(( __far uchar* ) Address )); /* Read byte */ } /***************************************************** @Fn: Read4BytFromFlash() @Br: 从EEPROM中读取连续的4字节 @Pa: 指定EEPROM地址 @Rt: 读取的LONG内容 @Sp: 小端模式 *****************************************************/ ulong Read4BytFromFlash( ulong Address ){   ulong i;   ulong Temp[2];      Temp[0] = *(( __far uchar * )Address );   Temp[0] |= ( *((( __far uchar * )Address ) + 1 ) << 8 );   Temp[1] = *((( __far uchar * )Address ) + 2 );   Temp[1] |= ( *((( __far uchar * )Address ) + 3 ) << 8 );      i = Temp[0] + ( Temp[1] << 16 );   free( Temp );   return i; } /***************************************************** @Fn: EraseByteFLASH() @Br: 擦除EEPROM中内容 @Pa: 指定EEPROM地址 @Rt: 无 @Sp: 无 *****************************************************/ void EraseByteFLASH( uint Address ){   *(( __near uchar * ) Address ) = 0x00; } void Test( void ){   ulong i;   UnlockFlash( UNLOCK_EEPROM_TYPE );   Write4BytToFlash( ADD_EEPROM_S8, 0x12345678 );   LockFlash( UNLOCK_EEPROM_TYPE );   i = Read4BytFromFlash( ADD_EEPROM_S8 );   i = i; }
    2. Illegalopcodereset 13/5853 stm32/stm8 2010-09-06
                                       我就是看到了上面的帖子才用T4代替T3的
    3. 两个单片机通信的问题 8/4674 微控制器 MCU 2010-07-27
      波特率设置是否一样
    4. ST裸机开发能用malloc吗? 7/11609 stm32/stm8 2010-07-16
                                       有的,这个是属于C库函数,编译器会给你编译出一个malloc函数的,不过Heap还得自己设置。 MDK中这个函数就是用来设置heap大小的.;******************************************************************************* ; User Stack and Heap initialization ;*******************************************************************************                  IF      :DEF:__MICROLIB                                  EXPORT  __initial_sp                  EXPORT  __heap_base                  EXPORT  __heap_limit                                  ELSE                                  IMPORT  __use_two_region_memory                  EXPORT  __user_initial_stackheap                   __user_initial_stackheap                  LDR     R0, =  Heap_Mem                  LDR     R1, =(Stack_Mem + Stack_Size)                  LDR     R2, = (Heap_Mem +  Heap_Size)                  LDR     R3, = Stack_Mem                  BX      LR                  ALIGN复制代码
    5. STM8S外部中断问题请教 4/7583 stm32/stm8 2010-07-13
                                       允许中断之前相应的中断标志已经置位,清除该标志位之后再允许中断
    6. 如何将应用程序build入OS Image? 26/9016 嵌入式系统 2010-06-23
      应该在platform.bib和project.bib中添加都可以吧,但是同时你要将你的应用程序copy到release目录下啊 我一般都是在platform.bib中加
    7. 谢谢大家这么帮忙,呵呵
    8. 加我一下,qq: 78617208, 应该可以帮你
    9. 待遇不好人家才走的吧, 如果待遇不好,你也别干了,没有前途, 重视人才的企业,会留住人才,而不是把你变成多面性的人才
    10. RTX51 Tiny小程序出问题 7/3852 嵌入式系统 2010-03-03
      引用 3 楼 sakura1987 的回复: 谁说不能选89C51?只要在配置文件Conf_tny.a51中修改RAMTOP? EQU? 7FH 就行了。
    11. bootLoadModule 2/3180 嵌入式系统 2010-03-01
      你要说你用的什么CPU,不然大家怎么给你回答呢
    12. usb serial 的问题 20/8047 嵌入式系统 2010-02-07
      引用楼主 accessysq 的回复: 将usb设备口作为串口使用 2.如果安装了同步软件,同步软件能否同步上?如果能,那么在usb作为串口被使用的时候能否同步上?
      这个跟板子中的USB类型设置也有些关系,如果USB类型为HOST类型的,这种情况下不可能同步上。
    13. C51函数返回值的相关问题 13/5002 嵌入式系统 2010-01-14
      不懂,小弟初学C51哈,以前都用汇编! 大虾,多多指点! 在函数调用的时候,是怎么传递参数的呀?通过指定RAM吗?如何可以获取这个地址? 我是想通过这样的方法控制返回值,不知道可以不?
    14. 单片机和嵌入式 21/5116 嵌入式系统 2010-01-10
      不懂的地方就问硬件的同事,仔细读一下usermannual, 先不要去搞bootloader,那个太底层了,从驱动层开始吧, 驱动层熟了之后再去搞bootloader等涉及汇编的dd
    15. 单片机串口通讯的奇偶校验问题 16/12029 嵌入式系统 2010-01-07
      那就是说,不可能出现发送8位有效数据还能使用串口奇偶校验吧? 我现在在数据帧里加了一个字节,来记录整个数据帧里数据的位1的个数,以此来当作一个简单的校验。这样做有什么问题没有? 另外,请问有什么快速的方法查询一个字节里有多少个1?
    16. 对中国目前3G的一点看法 14/4139 嵌入式系统 2009-12-13
      纯顶,觉得3G离我们还远的很。不当第一个吃螃蟹的人
    17. wince 驱动调试助手驱动加载失败 3/5608 WindowsCE 2009-12-13
      http://www.cnblogs.com/we-hjb/archive/2008/08/31/1280822.html 楼主看看这篇文件 或许对你有帮助
    18. ADS1.2如何设置LPC2138的堆栈 8/5197 嵌入式系统 2009-12-03
      周立功的ads模版 LPC2136的 mem_c.scf ROM_LOAD 0x0 {     ROM_EXEC 0x00000000     {         Startup.o (vectors, +First)         * (+RO)     }     IRAM 0x40000000     {         Startup.o (MyStacks)         * (+RW,+ZI)     }     HEAP +0 UNINIT     {         Startup.o (Heap)     }     STACKS 0x40002000 UNINIT     {         Startup.o (Stacks)     } }
    19. 抛个砖。STM8S207+ZLG7289 10/5280 stm32/stm8 2009-11-25
                                       通了。。。
    20. 基于80c51单片机倒计时定时器的毕业论文 10/5928 嵌入式系统 2009-11-22
      我做过,也有不少这方面的资料,但是不会随便给人。

最近访客

< 1/1 >

统计信息

已有91人来访过

  • 芯积分:--
  • 好友:--
  • 主题:8
  • 回复:70

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言