本帖最后由 shuishuo615 于 2013-3-6 21:56 编辑
程序非常简短
在IAR可以调试收发成功
但是在STVD中不能用,请帮忙看下是哪里有问题工程文件在附件中
/*******************it.c****************/ INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
unsigned char c;
c = UART1_DR; // 接收到数据了
while(!UART1_SR_TXE);
c++; // 把接收到的数据加1
UART1_DR = c;
}
#endif
/*************main.c**********************/
void CLK_init(void)
{
CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M
}
void UART1_init(void)
{
UART1_BRR2 = 0x01; // 设置波特率9600
UART1_BRR1 = 0x34; // 8M/9600 = 0x341
UART1_CR2 = 0x2C; // 允许接收中断,允许接收,允许发送
}
void init_devices(void)
{
_asm("sim"); // 关全局中断
CLK_init();
UART1_init(); // 开发板上的串口接的是UART3,刚开始想当然的认为UART1,浪费我半个小时
_asm("rim"); // 开全局中断
}
void main(void)
{
init_devices();
/* Infinite loop */
while (1)
{
;
}
}
调试发现,发送一个数据后,停留在中断的25号中断中,
INTERRUPT_HANDLER(NonHandledInterrupt, 25)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
;}
#endif /*_COSMIC_*/
并非UAR1接收中断的18号中断中我将程序写入25号中断,可以执行
问题出在哪里?
我的选型是103,为什么不进18号中断
|