-
这就好比说,unix市场份额越来越小,但不仅没有淘汰,还丛linux获得了新生。寿命比Windows还长。而且不见得会淘汰。
-
哇哇哇。。。
第一:关于延迟,是我看错了,恕我眼拙哈
LZ说的是对的,在你这个应用里就是2.5ms。
反正“i2c_10clk_us*one_us_unit”就是要延迟10个I2C时钟脉冲这么长的时间,需要给以72MHz频率free running的systick的reload值。
"i2c_10clk_us*one_us_unit*100"么就是1000个I2C时钟脉冲的时间啦。
我这里的"*100"都是随便写的,"*120","*200"都可以。因为我没有LZ具体应用中什么16ms间隔之类的要求。如果有具体的应用要求,适当修改这个超时的值。
-
楼上仔细看stm8s.h里面 TIM2_TypeDef 的定义
typedef struct TIM2_struct
00679 {
00680 vu8 CR1; /*!< control register 1 */
00681 #if defined STM8S103 //1-问题在此处
00682 vu8 RESERVED1; /*!< Reserved register */
00683 vu8 RESERVED2; /*!< Reserved register */
00684 #endif
00685 vu8 IER; /*!< interrupt enable register */
00686 vu8 SR1; /*!< status register 1 */
00687 vu8 SR2; /*!< status register 2 */
... ...
上面是我复制下来的定义的一部分,看看//1处注释,如果不预定义STM8S103的话,那两个保留的8位寄存器定义就打不开,导致调用库函数打开中断的时候,虽然操作的寄存器名义上是IER,但因为前面两个8位寄存器没打开,所以库函数实际操作的值被写入了偏移2个8位寄存器之后的那个寄存器了。
但我要说的是我还是没明白IAR为什么要这么做?而且IAR官方没有发布针对各种器件的标准例程,所以初用STM8+IAREWSTM8的人如果恰巧碰到这个问题的话说不定会憋多久才能搞出来,虽然IAR还是没有毛病的,但碰到这个问题的人感觉太奇怪了不容易解决所以可能会产生误解,这块儿的问题还是值得初用的人注意的。
-
自己就做过一段时间驱动,门槛高,但就业好
-
我就有一点奇怪,电源不时有滤波电路的吗,怎么会产生ns级的大幅跳变呢?测得对吗?
-
额外加的两个是简化的串口?
应该说是有三个具有较多扩展功能的标准串口,和两个具有较少扩展功能的标准串口,是增强的而不是简化的。
所有5个串口都具有标准串口的功能,同时具有或多或少的扩展功能,比如支持同步通信,支持IrDA,支持LIN,支持ISO7816,这些额外功能都是其它MCU的串口模块所不具备的。
-
bank指一个内存区域!
-
不懂,友情帮顶了!
-
引用 11 楼 sunrain_hjb 的回复:
确认一下IF IMGHIVEREG中的IMGHIVEREG是否被定义了先。
这个应该问题不大吧,
我有部分定义了,有部分没有定义
-
哦,,谢谢!!但是探测接受到的光强不是和环境温度有很大关系嘛??是不是要考虑,如果考虑的话是不是还要建立一个表,对应不同的温度,设定不同的参量。
-
用verilog吧
-
引用 4 楼 91program 的回复:
看你所用的模块的AT命令,应该有静音的AT命令
TAPI是不是有对应的API?
-
引用 2 楼 jgj58 的回复:
can通讯都是有标准的,不同的波特率最大通讯距离都是确定的。
你说的长与短具体是多少?
所谓的不能收发具体怎么不能收发,问的太笼统。
不同的can设备板,可以收发,当然长距离会导致大量的错误帧。这是什么意思?只要设备有can接口就可以通讯的。
跟着大犇学习,呵呵…
-
to 楼上:
没有执行delete;上面是专门测试功能的,就没考虑内存泄露。
就在资源里加了一个Static,导入一个bmp图像,加了一个button;上述代码放在了对button的响应里。
VC的开发过程完全一样
-
您好,不知道前面各位的问题解了没,你们说的问题小弟并不太懂,但我们目前是divacom在中国区域的总代理,从03年来一直专注于做DM9000及DIVACOM全线产品,对于研发来说,首先是产品质量有保证(为当年全新原装最新版本),然后通过我们可以找到原厂的工程师做技术支持,当然,是免费提供的,说不定我能帮得上大家的忙,以下是我的联系方式 QQ:1259987438 电话:027-8765163610 (0)13554272382 王洪武
-
我的源程序如下
#include "msp430x22x4.h"
unsigned int RxByteCtr;
/*********************************************************
* 数据定义
*********************************************************/
unsigned char read_Buf, //读缓冲区
write_Buf, //写缓冲区
ctrl_Buf, //用于存放控制指令等的中间缓冲区
addr_Buf1, //高地址缓冲
addr_Buf2,
ack_Flag; //应答标识
/************************************************
* 延迟
************************************************/
void iic_Delay(void)
{
_NOP();
_NOP();
_NOP();
}
/*********************************************************
* 启动IIC
*********************************************************/
void start_IIC(void)
{
//P3DIR &= 11111001;//P4OUT &= 0x3f; //设置P4OUT
P3DIR |= BIT1+BIT2;//P4DIR &= 0x7f; //SDA = 1
P3OUT |=BIT1;
iic_Delay();
iic_Delay();
//P3DIR |= BIT2;
P3OUT |=BIT2;//P4DIR &= 0xbf; //SCL = 1
iic_Delay();iic_Delay();
P3OUT &= ~BIT1;//P4DIR |= 0x80; //SDA = 0
iic_Delay();iic_Delay();
P3OUT &= ~BIT2;//P4DIR |= 0x40; //SCL = 0
iic_Delay();iic_Delay();
}
/*******************************************************
* 停止IIC
*******************************************************/
void stop_IIC(void)
{
P3DIR |= BIT1+BIT2;
P3OUT &=~BIT1; //P4DIR |= 0x80; //SDA = 0
iic_Delay();iic_Delay();
P3OUT |=BIT2;//P4DIR &= 0xbf; //SCL = 1
iic_Delay();iic_Delay();
P3OUT |=BIT1;//P4DIR &= 0x7f; //SDA = 1
iic_Delay();iic_Delay();
P3OUT &=~BIT1;//P4DIR |= 0x80; //SDA = 0
iic_Delay();iic_Delay();
P3OUT &= ~BIT2;//P4DIR |= 0x40; //SCL = 0
}
/*******************************************************
* 发送 0
*******************************************************/
void send_Zero(void)
{
P3DIR |= BIT1+BIT2;
P3OUT&= ~BIT1;//P4DIR |= 0x80; //SDA = 0
iic_Delay();iic_Delay();
P3OUT|= BIT2;//P4DIR &= 0xbf; //SCL = 1
iic_Delay();iic_Delay();
P3OUT &=~BIT2;//P4DIR |= 0x40; //SCL = 0
iic_Delay();iic_Delay();
}
/*******************************************************
* 发送 1
*******************************************************/
void send_One(void)
{
P3DIR |= BIT1+BIT2;
P3OUT|= BIT1;//P4DIR &= 0x7f; //SDA = 1
iic_Delay();
iic_Delay();
P3OUT|= BIT2;//P4DIR &= 0xbf; //SCL = 1
iic_Delay();
iic_Delay();
P3OUT&= ~BIT2;//P4DIR |= 0x40; //SCL = 0
iic_Delay();
iic_Delay();
P3OUT&= ~BIT1;//P4DIR |= 0x80; //SDA = 0
iic_Delay();iic_Delay();
}
/*******************************************************
* 发送一个字节数据
*******************************************************/
void send_Char(void)
{
unsigned char cnt,tmp=0x80;
for(cnt=0;cnt 0)
{
send_One(); // 发送1
}else
{
send_Zero(); // 发送0
}
tmp /= 2; // tmp右移一位
}
}
/*******************************************************
* 读一个byte数据
*******************************************************/
void read_Char(void)
{
unsigned char cnt,tmp=0x80;
read_Buf = 0x00;
for(cnt=0;cnt 0x00)
{ // 收到 1
read_Buf |= tmp;
}
P3OUT&=~BIT2;//P4DIR |= 0x40; //SCL = 0
iic_Delay();
tmp = tmp/2;
}
}
/*************************************************
* 应答信号
*************************************************/
void iic_ACK(void)
{
ack_Flag = 0x00;
P3DIR |= BIT1+BIT2;
P3OUT|=BIT1;//P4DIR &= 0x7f; //SDA = 1
iic_Delay();
iic_Delay();
P3OUT|= BIT2;//P4DIR &= 0xbf; //SCL = 1
iic_Delay();iic_Delay();
P3DIR &= ~BIT1;
if ((P3IN & BIT1) == BIT1 )//if ((P4IN & 0x80) == 0x80 )
{
ack_Flag = 0x01;
}
P3OUT&=~BIT2;//P4DIR |= 0x40; //SCL = 0
iic_Delay();iic_Delay();
}
/***********************************************
* iic_NACK
************************************************/
void iic_NACK(void)
{
P3DIR |= BIT1+BIT2;
P3OUT |=BIT1;//P4DIR &= 0x7f; //SDA = 1
iic_Delay();
P3OUT |= BIT2;//P4DIR &= 0xbf; //SCL = 1
iic_Delay();
P3OUT &=~BIT2;//P4DIR |= 0x40; //SCL = 0
iic_Delay();
P3OUT &=~BIT1;//P4DIR |= 0x80; //SDA = 0
iic_Delay();
}
/*************************************************
* iic_SENDACK
*************************************************/
void iic_SENDACK(void) //send the answer bit
{
P3DIR |= 10;//SDA=0;
iic_Delay();
P3DIR &= 11111011;//SCL=1;
iic_Delay();//NOP();
P3DIR |= 100;//SCL=0;
iic_Delay();
P3DIR &=11111101;//SDA=1;
iic_Delay();
}
/***************************************************
* iic_Write
***************************************************/
void iic_Write()
{
do
{iic_Delay();iic_Delay();iic_Delay();iic_Delay();
iic_Delay();iic_Delay();iic_Delay();iic_Delay();
iic_Delay();iic_Delay();
start_IIC();//I2cStartBit();
ctrl_Buf=0X70;//addr_Buf1;
send_Char();//I2cWriteByte(slaw);
iic_ACK();//I2cTestAck();
}
while(ack_Flag==1);//while(F0==1);
ctrl_Buf=0X06;//write_Buf;
send_Char();//I2cWriteByte(Buffer[Index]);
iic_ACK();//I2cTestAck();
stop_IIC();
}
/***************************************************
* iic_Read
***************************************************/
void iic_Read()
{
//unsigned char OneByte;
//unsigned char i;
do
{
start_IIC();//I2cStartBit();
ctrl_Buf=0X4f;//addr_Buf2;
send_Char();//I2cWriteByte(slaw);
iic_ACK();//I2cTestAck();
}
while(ack_Flag==1);//while(F0==1);
read_Char();
iic_NACK();
stop_IIC();
}
void main()
{
WDTCTL=WDTPW+WDTHOLD; //关看门狗
BCSCTL1 =CALBC1_1MHZ; //设定DCO 为1MHZ
DCOCTL =CALBC1_1MHZ;
//start_IIC();//I2cStartBit();
//ctrl_Buf=0X00;//addr_Buf2;
//send_Char();//I2cWriteByte(slaw);
//iic_ACK();//I2cTestAck();
while(1)
{
iic_Write();
}
}
-
引用 3 楼 hitszj604 的回复:
多谢两位达人,给分了。
问题解决,是因为usb连接到电脑上不能让系统自动进入休眠
哦,恭喜lz了,不过我还是一头雾水,哈哈
-
字库芯片。确实有这种东西啊。我们公司的智能终端上有用过。它就是一块FLASH,里面存储着显示汉字的相应数据,要显示什么字,就将相应的汉子内码发过去,程序扫描到FLASH的相应地址去取得显示该汉字的数据信息。我也说不清楚,反正是有这种芯片。
-------------------------------------------------------------------------------------
现阶段连菜鸟都算不上,其实我就是顶贴的。
-
听说人家上网本都做呢。。。那就无所不能了
-
NAND Flash因为可能存在坏块,所以一定会有spare区了。page分为main和spare区。main是用来保存数据的。spare区一般用来标记坏块,和保存对main区数据的ECC校验码。
至于spare 区的格式,这个由自己设定,没有标准格式的。正如楼主的
LSN0 LSN1 LSN2 RESERVED RESERVED BI ECC0 ECC1 ECC2 S-ECC0 S-ECC1 RESERVED RESERVED RESERVED RESERVED RESERVED
也是一种。
至于说地址跟sector的数目关系。我觉得是因为存在有坏块,所以地址中间会有断开,不连续、数值很大而且不能直接访问,不方便管理。而用sector的概念就比较好处理。统计下来整个flash有多少好的sector,每次写了多少sector,还剩下多少sector,一目了然。