我用IAR Embedded Workbench for ARM 6.10软件编写串口中断程序 设置STM32为串口接收中断,串口在接收到PC机数据后,产生中断,并将数据发回PC机。 将程序下载到STM32上全速运行的话,接收及返回给PC机的数据均是正确的。 现在我想看STM32串口中断的运行过程,所以采用单步运行方式,进入串口中断程序后,再单步运行至出串口中断, 此时程序不知运行到哪里去了。这是为什么? 我的中断程序很简单,如下: void USART1_IRQHandler(void) { asm("nop"); asm("nop"); u8 t=USART1->SR; u8 i=USART1->DR; USART1->DR=i+1; u8 p=USART1->SR; asm("nop"); asm("nop"); asm("nop"); asm("nop"); } 另外有个问题: 我查看DISASSEMBLY 窗口对上中断程序的译码时,没有看到有PUSH指令,其内容如下: USART1_IRQHandler: 0x800017c: 0xbf00 NOP asm("nop"); 0x800017e: 0xbf00 NOP u8 t=USART1->SR; 0x8000180: 0xf8df 0x04b8 LDR.W r0, ??DataTable10_1 ; USART1_SR 0x8000184: 0x8800 LDRH r0, [r0] u8 i=USART1->DR; 0x8000186: 0xf8df 0x14b8 LDR.W r1, ??DataTable10_2 ; USART1_DR 0x800018a: 0x8809 LDRH r1, [r1] USART1->DR=i+1; 0x800018c: 0xb2c9 UXTB r1, r1 0x800018e: 0x1c4a ADDS r2, r1, #1 0x8000190: 0xf8df 0x34ac LDR.W r3, ??DataTable10_2 ; USART1_DR 0x8000194: 0x801a STRH r2, [r3] u8 p=USART1->SR; 0x8000196: 0xf8df 0x24a4 LDR.W r2, ??DataTable10_1 ; USART1_SR 0x800019a: 0x8812 LDRH r2, [r2] asm("nop"); 0x800019c: 0xbf00 NOP asm("nop"); 0x800019e: 0xbf00 NOP asm("nop"); 0x80001a0: 0xbf00 NOP asm("nop"); 0x80001a2: 0xbf00 NOP } 0x80001a4: 0x4770 BX lr 麻烦高手指教 |
回复:串口中断