大家好,小弟不才,最近接触STM8使用STVD+COSMIC8。跟着例程学习固件库,可是做到UART3的时候有一个问题,我的程序主程序中是不断闪烁一次PD7发送一个字符0X66,UART3中断是闪烁一次PD0。也就是说我的程序执行下来效果是,PD7闪一下,发送0X66,PD0闪一下,再发送0X66,PD7闪一下........一直这样循环(只是为了验证发送中断)。 这里是我的UART3初始化: void uart3init(void) { UART3_Cmd(ENABLE); //开启UART3 UART3_DeInit(); //UART3默认初始化 UART3_Init((u32)9600, UART3_WORDLENGTH_8D, UART3_STOPBITS_1, UART3_PARITY_NO, UART3_MODE_TX_ENABLE); //UART3初始化,9600波特,8位。1停止位,无校验,发送允许 UART3_ITConfig(UART3_IT_TC,ENABLE); //发送完毕中断 } 主程序: mian() { while(1) { UART3_SendData8(0x77); delay(200); GPIO_WriteReverse(GPIOD,GPIO_PIN_7); } } 中断函数: @near @interrupt void UART3_TX_IRQHandler(void) { GPIO_WriteReverse(GPIOD,GPIO_PIN_0); delay(100); return; } 如上,运行结果是PD0不断闪烁,也就是说程序一直执行中断,没有跳回主程序。 如果是要清除中断标志位,在中断第一句写入UART3_ClearITPendingBit(UART3_IT_TC); 效果是2个灯都不闪,调试过程中看到程序一直在执行assert_failed();函数,也就是说程序可能跳出了中断,但没回到主程序,(主程序可被圈在while(1)里呀)。加上一点的是,如果URAT3不开启中断,则PD7不断闪烁,也就是死循环在主程序。有高人遇到过这个问题么?求解答呀,还有就是这个程序到底干嘛的,看样子应该是编译器的提示函数。为何我的程序无端端跳进去,还是我误解了,程序如下: #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif 求高人解答。不慎感激!!! |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】