你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 4771|回复: 0

STM8 UART3问题(使用2.0固件库)

[复制链接]

2

主题

10

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-8-11 17:48:39 | 显示全部楼层 |阅读模式
 大家好,小弟不才,最近接触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
求高人解答。不慎感激!!!

 
 
回复

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版