-
4152有堆栈溢出自动复位机制啊!
-
手册上不是说 读那个数据寄存器 可以自动清除标志位吗?我是菜鸟 不知道对不对 嘿嘿
-
建议改成中断方式延时。
你这里是不是让CPU等待的延时方法,这样的法,中断函数处理频率和处理内容的多少直接会影响你的这个电平频率的变化。
-
是不是芯片型号不对啊,我看错识提示和RAM,FLASH有关。
-
你们也就不要打击人家了,出这样的题目确实搞笑,但想想,人家只检测黑、白,那么对于二值图像的话,存储也不是很大问题吧?64K = 724X724的点了,但是人家可不要这么大,图像面积又不大。
嘿嘿,这样的话,关键也就是怎么采集图像了,而且是怎么采集二值图像。
-
#define DAT_I2C_DDR PC.DDR.B4
#define DAT_I2C_CR1 PC.CR1.B4
#define DAT_I2C_CR2 PC.CR2.B4
#define DAT_I2C_ODR PC.ODR.B4
#define DAT_I2C_IDR PC.IDR.B4
#define SCL_I2C_DDR PC.DDR.B5
#define SCL_I2C_CR1 PC.CR1.B5
#define SCL_I2C_CR2 PC.CR2.B5
#define SCL_I2C_ODR PC.ODR.B5
#define SCL_I2C_IDR PC.IDR.B5
unsigned char dat1154[3]= {0,0,5};
/******************************************************************************
函数:i2c_delay()
功能:
说明:
******************************************************************************/
#define i2c_nop nop()
void i2c_delay( void )
{
nop();
nop();
nop();
}
/******************************************************************************
函数:I2C_init()
功能:I2C总线初始化,释放总路线;使总线处于空闲状态 (总线为输入)
说明:在main()函数的开始处,应当执行一次本函数
******************************************************************************/
void I2C_init(void)
{
SCL_I2C_DDR=1;
SCL_I2C_CR1=0;
SCL_I2C_CR2=0;
SCL_I2C_ODR=1;
DAT_I2C_DDR=1;
DAT_I2C_CR1=0;
DAT_I2C_CR2=0;
DAT_I2C_ODR=1;
}
/******************************************************************************
函数:i2c_start()
功能:起动IIC
说明:执行前后都是输出模式
******************************************************************************/
void I2C_Start(void)
{
SCL_I2C_ODR=1;
SCL_I2C_DDR=1;
i2c_nop;
DAT_I2C_ODR=1;
DAT_I2C_DDR=1;
i2c_delay();
DAT_I2C_ODR=0;
i2c_delay();
SCL_I2C_ODR=0;
i2c_delay();
}
/******************************************************************************
函数:i2c_start()
功能:起动IIC
说明:执行前后都是输出模式
******************************************************************************/
void I2C_Stop(void)
{
SCL_I2C_ODR=0;
i2c_nop;
DAT_I2C_ODR=0;
i2c_delay();
SCL_I2C_ODR=1;
i2c_delay();
DAT_I2C_ODR=1;
i2c_delay();
}
/******************************************************************************
函数:I2C_Write()
功能:向I2C总线写1个字节的数据
参数:dat是要写到总线上的数据
******************************************************************************/
unsigned char I2C_Write(unsigned char dat)
{
unsigned char n=8;
while(n)
{
i2c_delay();
if(dat&0x01)DAT_I2C_ODR=1;
else DAT_I2C_ODR=0;
i2c_delay();
SCL_I2C_ODR=1;
i2c_delay();
i2c_delay();
dat=dat>>1;n--;
SCL_I2C_ODR=0;
}
i2c_delay();
DAT_I2C_DDR=0;
i2c_delay();
SCL_I2C_ODR=1;
i2c_delay();
n=DAT_I2C_IDR; //NACK or ACK;
i2c_delay();
SCL_I2C_ODR=0;
i2c_delay();
DAT_I2C_DDR=1;
i2c_delay();
return n;
}
//******************************************************************
//.................先发高位................................
unsigned char I2C_WriteMSB(unsigned char dat)
{
unsigned char n=8;
while(n)
{
i2c_delay();
if(dat&0x80)DAT_I2C_ODR=1;
else DAT_I2C_ODR=0;
i2c_delay();
SCL_I2C_ODR=1;
i2c_delay();
i2c_delay();
dat=dat<<1;n--;
SCL_I2C_ODR=0;
}
i2c_delay();
DAT_I2C_DDR=0;
i2c_delay();
SCL_I2C_ODR=1;
i2c_delay();
n=DAT_I2C_IDR; //NACK or ACK;
i2c_delay();
SCL_I2C_ODR=0;
i2c_delay();
DAT_I2C_DDR=1;
i2c_delay();
return n;
}
/******************************************************************************
函数:I2C_Read()
功能:从从机读取1个字节的数据
返回:读取的1个字节数据
******************************************************************************/
unsigned char I2C_Read(unsigned char ack)
{
unsigned char dat=0;
unsigned char t = 8;
DAT_I2C_DDR=0;
while(t--)
{
dat <<= 1;
i2c_delay();
SCL_I2C_ODR=1;
i2c_delay();
if (DAT_I2C_IDR)dat+=0x01;
i2c_delay();
SCL_I2C_ODR=0;
i2c_delay();
}
DAT_I2C_DDR=1;
DAT_I2C_ODR=ack; //NACK or ACK
i2c_delay();
SCL_I2C_ODR=1;
i2c_delay();
i2c_delay();
SCL_I2C_ODR=0;
i2c_delay();
return dat;
}
-
好东西,得去研讨会弄块板子
-
我们讨论了一下,如果使用有源晶振可以提高EMC性能,但因为手头没有测试仪器,还没有做个实际的试验。
-
JTAG软件安装后检测不到芯片。。
是不是需要装驱动啊?
-
对的,波形是对的。 那USART1里面是否有哪个位是设置接收的时候先接收高位还是地位的吗?
因为UART4我也是这么设置的,然后跟其他MCU的UART通讯都是正常的。 所以我有点不明白了。
-
我现在的想法是加一个STM809之类的复位电路,但是和NRST之间串个1K左右的电阻,
因为JTAG调试的时候可能和STM809的复位引脚冲突。
谢谢5楼的解答,无需外挂复位电路,
但是否NRST引脚上拉比较安全?
-
这个东西对时序要求比较严格,以前搞的时候是用51汇编写的,呵呵
-
我的片上的VDD 和VDDA是分开供电的 为了不干扰模拟部分
-
记不清了 有一个CMD 多少了,你找找手册,先送一个命令,然后才可以擦密码,
要不找一个pc 端的软件,用pc来擦
-
一个消息,当设备发生改变时候,系统会广播这个消息,应用程序可以捕获它
这个消息头文件里可能没有定义,但是wince中确实是有的,值好像=0x219,和windows上一样
-
矫正之后,用远程注册表编辑器,把这几个数值读出来,写到BSP的reg里面,这样省得每次都得校验。
-
慢的话可以调一下MFC(6410这么说的)的内存大小;
还有提高MFC的频率。在一个头文件里
这是6410,c100我没搞哦
-
如果用for语句,建议移位的时候用,因为用_crol_和_cror_虽然写的时候简单,但是调试的时候看汇编指令就知道比复杂的多了。建议改为
void main()
{
while(1)
{
temp=0xfe;
temp1=0x7f;
for(i=0;i
-
引用 4 楼 alien75 的回复:
这种方式是wince5之前版本是静态分配系统中断的方式。在ISR函数(如OEMInterruptHandler)中根据产生的此外设占用的物理中断来返回系统中断激活IST。
正解!
应该是事先用静态方式绑定的中断。lz可以看看intr.c文件。
-
顶!!!!!!!!!!!!