-
http://www.stmcu.org
大概看了一下,很不错,版主不厚道哦,早该公布一下啊!lol!ST的那个的进去真是迷糊!:
-
得了吧,ST会做多少技术支持。要是觉得复杂的话,就把USB OTG相关的代码开源,其他的都废话
-
没有用库,写寄存器的话就可以帮你,你跟踪入去,看一下各个RTC寄存器的状态.
-
采用单次扫描模式。
ADON = 1后 while(ADC_CSR == 0x80); //等待转换结束
-
感谢版主,搞定.
-
查了一下公司的系统服务器,这个问题早在2008年已经以FAQ的形式解释过,并给出了分析和解决方法,我以前也没有注意到这个问题,这次有网友提出才去关注。
在ARM的系统架构下,这是一个普遍的问题,而不是STM32所特有的问题。
这个FAQ的内容如下:
Q: When I cleared the interrupt as the last instruction in the ISR,
the ISR code is called immediately upon exit half the time. Is there a
possibility of race condition ?
Answer:
The core (Cortex-M3) generates bufferable write transfer. This mean
that the CPU consider that the data is written from an AHB point of
view while the APB write transfer is managed by the AHB2APB bridge and
could be written later. In this case the CPU left the interrupt
routine while the interrupt is not yet cleared the CPU will re-enter
again on the interrupt handler. To avoid this race condition :
1) ISR routine has to clear the interrupt peripheral flag when just
entering in the routine to avoid interrupt missing.
2)ISR routine has to Implement a write to the APB peripheral register
( to clear the peripheral flag) then followed by a read access to the
same register/flag. This operation will force the write buffer to
complete the effective write and will stall the CPU until the
effective write of the bit in the register. Therefore it is
independent from the AHB/APB ratio prescaler.
Here an example :
STR R1, [R0, #0] ; Store R1 register peripheral register ( or
using bit-banding peripheral address)
LDR R2, [R0, #0] ; Load the peipheral register; This will hold the
CPU until the effective write of R1.
Use Cortex-M3 Bit-banding feature for interrupt clearing since it is
an atomic operation and NVIC pending interrupts will be ignored during
this operation, however Read-Modify-Write is not.
ST网站的FAQ页面入口是:http://www.st.com/stonline/faq/user_faqbrowser.php
这几天这个页面出了点问题,正在检查维护,很快会恢复。
-
找到原因了,是因为我在platform.dat里建了这几个目录和文件:
Directory("\Windows"):-Directory("pic")
Directory("\Windows\pic"):-Directory("warn")
Directory("\Windows\pic"):-File("BACK.bmp","\Windows\BACK.bmp")
Directory("\Windows\pic"):-File("BACK320x480.bmp","\Windows\BACK320x480.bmp")
Directory("\Windows\pic"):-File("BACK480x320.bmp","\Windows\BACK480x320.bmp")
("menu_on_sel480x320.bmp","\Windows\menu_on_sel480x320.bmp")
Directory("\Windows\pic\warn"):-File("BNG.BMP","\Windows\BNG.bmp")
Directory("\Windows\pic\warn"):-File("BNG320x480.BMP","\Windows\BNG320x480.bmp")
Directory("\Windows\pic\warn"):-File("BNG480x320.BMP","\Windows\BNG480x320.bmp")
去掉它们就很快了;
但是,我的应用程序是要用到pic、pic/warn这两个目录的,这两个目录下有一些文件。
怎样才能既使用这些目录、文件,又不影响启动速度呢?
-
嵌入式要软硬结合嘛,老软着老硬着都不是事啊,对吧,楼主?
-
现象就是LED都不亮,那段LED的显示代码用了N次,不可能出问题的。
-
/usr/share/terminfo/x/xterm
保留这个文件
-
据我所知,c#运行速度比C++慢,但是开发速度比C++快,现的硬件在电脑上可能C#更有优势
-
GridData是C#,还是VB里面的控件?
建议楼主挪到相应的编程论坛去。
-
NXP也有库的,CMSIS Lib。和ST的差不多
1# 丁弋宇
没错,CMSIS是Cortex-M统一标准。
-
楼主可以看看我上传的资料:
精典的PID原理与算法源码实例--数据采集礼包V2.0
http://download.eeworld.net/source/1899208
精典的PID原理与算法源码实例--数据采集礼包V2.0
包括详细的PID原理与算法分析,很具体的设计PDF文档。还有配套的完整的源码。
-
赞一个,支持自力更生!!!
-
引用 7 楼 xumercury 的回复:
引用 6 楼 hao507 的回复:
引用 1 楼 veabol 的回复:
相关引脚启动用这个功能了吗?还是处于GPIO的功能?
不是GPIO,就是用的CPU的引脚
检查下寄存器配置,看看那个pin是不是以前就复用到别的功能了,3530弄过一下子。GPIO拉低拉高是没问题的。以前一个兄弟也做过。SPI和I2C都是可以的。而且I2C我们就是用的模拟,SPI也是一样。
还有个疑问。McBSP1能不能详细说明下是个什么东东,是BSP包还是。。。。没看懂。汗。。。
如果是BSP,检查下你用的那个GPIO是否有被其他的部分重用。
个人建议 仅供参考。
McBSP就是多路串行接口,OMAP3530有5路,我是用的第一路,呵呵
-
查源码,应该可以找到g
-
既然能够调试,就应该看看JumpAddress这个变量的内容对不对。如果内容正确,就要看看IAP烧入的程序代码是否正确。
-
引用 3 楼 arnold9009 的回复:
2. 对方给的5V电平的高电平和低电平能不能被IO正确识别
不能正确识别的可能性非常大。
-
我这有,楼主看看吧:
#include
#define uchar unsigned char
#define uint unsigned int
#define Left 0x80
#define Right 0x40
unsigned char const Tab[]={0x14,0x9F,0x38,0x1A,0x93,0x52,0x50,0x1F,
0x10,0x12,0x11,0xD0,0x74,0x98,0x70,0x71};
void display();//负责把显示缓冲区的数据显示到数码管
void process(uchar left,uchar right);//刷新显示缓冲区
void delay(uint ticks);//延时
uchar ShuMa[2];//显示缓冲区
void WriteEPROM(uint Address,uchar Data);
uchar ReadEPROM(uchar Address);
uchar temp=1000;
void main()
{
uint Address=0;
init_devices();
//向0-511地址的EEPROM依次写入0--0xFF。共写满512字节EEPROM
for(Address=0;Address!=512;Address++)WriteEPROM(Address,Address&0x0ff);
while(1)
{//把512字节的EEPROM数据依次读出来显示
for(Address=0;Address!=512;Address++)
{//读数据到显示缓冲区
process(ReadEPROM(Address)>>4,ReadEPROM(Address)&0x0f);
while(temp--) display();//显示
temp=1000;
}
}
}
////////////////////////////////
void display()
{
PORTA=Left|Right;//关显示
PORTC=ShuMa[0]; //输出数据
PORTA=~Left; //开左数码管
delay(10); //延时
PORTA=Left|Right;//关显示
PORTC=ShuMa[1]; //输出数据
PORTA=~Right; //开右数码管
delay(10); //延时
}
///////////////////////////////////
void process(uchar left,uchar right)
{
ShuMa[0]=Tab[left];//查表
ShuMa[1]=Tab[right];//查表
}
/////////////////////////////////////
void delay(uint ticks)
{
uchar i;
while(ticks--)for(i=100;i!=0;i--);//约0.1mS
}
void WriteEPROM(uint Address,uchar Data)
{
while(EECR&0x02);//等待EEWE为0
EEARH=Address>>8;//写入高地址
EEARL=Address&0x0ff;//写入低地址
EEDR=Data; //写数据到EEPROM寄存器
EECR|=0x04; //置位EEMWE
EECR|=0x02; //置位EEWE
while(EECR&0x02); //等待EEWE为0
}
uchar ReadEPROM(uchar Address)
{
while(EECR&0x01);//等待EERE为0
EEARH=Address>>8;//写入高地址
EEARL=Address&0x0ff;//写入低地址
EECR|=0x01; //置位EERE,读数据
while(EECR&0x01); //等待EERE为0
return EEDR; //返回数据
}复制代码