4756|1

2942

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

困扰多日的STM32F030串口中断接收问题解决了 [复制链接]

本帖最后由 bigbat 于 2021-8-9 11:33 编辑

最近想做一个STM32F030串口中断接收程序,但是前后好多天也没有弄好,期间出现了很多奇怪的问题,我也网上发了好多帖子也是没有成功,这个问题十分的变态,现在把这个问题写出来好让大家不要在掉坑里。

简单的说就是:LL_USART_TransmitData8这货在主循环中输出字符数组就会引起执行异常,要不输出乱码要不就死机。过程是这样的

uint8_t txChar;
while (1)
{
    ...
    txChar =0x41;
    LL_USART_TransmitData8(USART1, txChar);
	while (!LL_USART_IsActiveFlag_TXE(USART1));
    ...


}


//程序原型
__STATIC_INLINE void LL_USART_TransmitData8(USART_TypeDef *USARTx, uint8_t Value)
{
  USARTx->TDR = Value;
}

中断程序大概是这样的,中间改过好多次了。 

__weak void USART_CharReception_Callback()
{
    static uint16_t k=0;
	  ReceBuf[k] = LL_USART_ReceiveData8(USART1);
	  k =(k+1)%8;
}
/**
  * @brief This function handles USART1 global interrupt.
  */
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
  if(LL_USART_IsActiveFlag_RXNE(USART1) && LL_USART_IsEnabledIT_RXNE(USART1))
  {
    /* RXNE flag will be cleared by reading of DR register (done in call) */
    /* Call function in charge of handling Character reception */
		
    USART_CharReception_Callback();
  }
  if (LL_USART_IsActiveFlag_TXE(USART1)) {
        LL_USART_ClearFlag_TC(USART1);
        //serial->txbusy = 0;
  }
	/* USER CODE END USART1_IRQn 0 */
  
	
	/* USER CODE BEGIN USART1_IRQn 1 */
 
  /* USER CODE END USART1_IRQn 1 */
}

这段程序怎么样都是正常的,输出没有问题,接收也没啥事。但是如果在主程序中让LL_USART_TransmitData8输出数组就会出现问题。

#define SIZE 8
...
uint8_t RecBuf[SIZE];
uint8_t txChar;
while (1)
{
    ...
    txChar = (uint8_t) RecBuf[len];
    LL_USART_TransmitData8(USART1, txChar);
	while (!LL_USART_IsActiveFlag_TXE(USART1));
    ...


}

不知道何故,我没有看到任何的违规操作。RecBuf是否初始化或赋值都不能正常工作。

但是如果把程序放到函数中就可以了。

while (1)
  {
    
		...
        LL_USART_TransmitDatas(ReceBuf,8);
		LL_GPIO_TogglePin(RS485RZ_GPIO_Port,RS485RZ_Pin);
        LL_Delay(500);
        ... 
		/* USER CODE END WHILE */
    
    /* USER CODE BEGIN 3 */
  }

...

void LL_USART_TransmitDatas(uint8_t *dataBuf,uint16_t len)
{
	while(len--)
    {
		LL_USART_TransmitData8(USART1, *dataBuf++);
		while (!LL_USART_IsActiveFlag_TXE(USART1));
	}
}

该问题不知道是何原因造成的,能有高人给指点一二

此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报

2942

帖子

4

TA的资源

五彩晶圆(中级)

沙发
 

论坛的编辑器,我在编辑的过程中刷新了一下页面就什么都没有了。而且自动保存也不知道如何取出,而且我点了草稿保存,结果在发布,就出现了“本帖最后由 bigbat 于 2021-8-9 11:33 编辑”

此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表