-
虽然OK了 但心理 还是 毛毛的 昨天炸了 2管子.
偶 鼓动 2个公司 的 老大 用 STM32 了 希望目前的 能考虑用呵呵!
-
EXTI外部中断控制寄存器
这块三合一的开发板上有且只有一个按键,没办法,就拿这唯一的按键来用吧。吸取前面UART3的教训,先看开发板的原理图吧。这个按键被接到了STM8S207SB的PD7上,已做了上拉处理。为了简单明了,还是点LED1吧。按一下LED1亮,再按一下LED1灭。好了,写程序吧。
#include <iostm8s207sb.h>
#define LED1_FLASH PD_ODR_ODR3 = !PD_ODR_ODR3 // 开发板上的LED1接在PD3上
void GPIO_init(void)
{
PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出
PD_CR1 = 0x08; // 设置PD3为推挽输出
PD_CR2 = 0x80; // 使能PD7外部中断
}
void EXTI_init(void)
{
EXTI_CR1 = 0x80; // PD口下降沿触发中断
}
#pragma vector=0x02 // 这里很关键!看下面说明。
__interrupt void EXTI_PD7_TLI(void)
{
LED1_FLASH;
}
void init_devices(void)
{
asm("sim"); // 关全局中断
GPIO_init();
EXTI_init();
asm("rim"); // 开全局中断
}
void main( void )
{
init_devices();
// 主循环里没有程序需要执行
while(1);
}
这里着重要说明的一点是PD7的外部中断程序。看了一下芯片手册,PD口外部中断EXTI3的中断向量号是6,想当然,又是想当然,按IAR的规矩中断向量要加2,就这样写#pragma vector=0x08,结果就是按下按键,程序没响应了,一直在中断里不出来。接下来只能另想办法,仔细翻了资料后发现,PD7和PD其他端口不一样,PD7后面拖了个小尾巴TLI,再看手册上的TLI描述,乖乖,TLI拥有芯片最高级别中断,享有独立专用的中断向量号0,这下就好办了,按IAR的规矩,向量号加2,程序改成#pragma vector=0x02,重新来一遍编译、下载、运行,按键终于听话了。
-
这些如果都是楼主自己写的,那楼主有写书的潜质
-
应该不是,因为这是一个测试程序,专门调这三路信号的接收,所以没有别的信号和中断设置。另外调试时我也曾将EXTI的优先级设成0,还是不行。
-
这个在CPP头已经更改了
#ifdef DEBUGMSG
#undef DEBUGMSG
#define DEBUGMSG(a,b) RETAILMSG(1,b)
#endif
-
时钟配置函数:
void CLK_Init(void)
{
CLK_DeInit();
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
}
周期比10ms长多了,不是一个级别
另2楼,Timer2是向上计数的,计数初值如果是625-1的话那溢出周期不是更长了吗?
-
看看中断触发是否正常,可以在中断处理线程中添加打印信息帮助确定问题。
-
我用TI的c6455,phy用LXT971,也遇到类似的问题。正在解决中。。。 。。。
-
引用 5 楼 xing005 的回复:
这些方法都可行,谢谢大家。
假设晶振是理想的精确的,定时器中断周期也是精确的3ms,
剩下的问题就是纯软件的问题了,我想知道这个纯软件的问题如何解决。
这种假设就是不合理的,晶振不可能是理想的。如果这样,你只能假设误差也是很小的了。
-
我上网上过,呵呵。
-
明白,A0--A15与数据总线D0-D15复用了,有个ALE,
-
一直F11到底,在执行 hWnd = ::CreateDialogIndirect(hInst,lpDialogTemplate,pParentWnd->GetSafeHwnd(), AfxDlgProcEx);
后出错,得到的dwError = ::GetLastError();dwError =1400 原因为:无效的窗口句柄。
应该是开始调用的时候参数没有传递出错,怎么改程序啊,大侠们!!!
-
呵呵,这个本本我买了半个月了,感觉蛮好用的,伐算。
-
顶起来一下
-
不单要在程序中设置好DEBUGZONE,还要在DLLEntry中调用DEBUGREGISTER()来注册debug zone,
-
我知道有人做了,但人家花了$100000买license,不可能流出来的
-
我的液晶内容有菜单操作,显示比较复杂。自己写很麻烦啊。
-
呵呵
boot是vivi的
知道kernel 是放什么了,是厂家放Linux内核,不知道把他删除有副作用没。
-
怀疑还是Cache的问题,再检查一下端口寄存器所在地址空间是否启用了Cache
-
用电话线拨号上网可以暂时解决你的问题.