[STM32L1] STM32L152RET6使用SetCLKtoMSI(RCC_MSIRange_6)时串口中断不能正常接收

[复制链接]
2366|9
 楼主| lizhengfsm 发表于 2015-7-2 20:00 | 显示全部楼层 |阅读模式
main函数开始设置时钟频率:
SetCLKtoMSI(RCC_MSIRange_6);我的数据格式是:@*xxxxxxxxxxxxxxxxx#,总共20个字符,开头先判断数据是否是有效数据,是的话就复制到USART_BUF1里面。时钟频率是16M的时候功能都是正常的,都可以使用,但是4M的时候就不能用了,求大神解答。

然后串口中断函数:
void USART1_IRQHandler(void)
{
        int i = 0;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
        {
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                dataBuffer1[RxCounter++]= USART_ReceiveData(USART1);
                USART_SendData(USART1,USART_ReceiveData(USART1));
                if(RxCounter >= 255)
                {
                        memset(dataBuffer1, 0, sizeof(dataBuffer1));
                        RxCounter = 0;
                        return;
                }
                for(i = 0; i < RxCounter; i++)
                {
                        if((dataBuffer1[i] == '@') && (dataBuffer1[i+1] == '*'))
                        {
                                if(i+20 <= RxCounter)
                                {
                                        strncpy(USART_BUF1, (char*)&dataBuffer1[i], 20);
                                        memset(dataBuffer1, 0, sizeof(dataBuffer1));
                                        RxCounter = 0;
                                }
                        }
                }
        }
}



 楼主| lizhengfsm 发表于 2015-7-2 20:01 | 显示全部楼层
自己顶,求大神帮解答,看了好几天了,找不到原因啊
mmuuss586 发表于 2015-7-2 20:32 | 显示全部楼层
时钟低的时候,中断程序太长了,处理过来了吧;

优化中断程序,操作寄存器;
另外一些判断,放主程序;
 楼主| lizhengfsm 发表于 2015-7-3 12:36 | 显示全部楼层
mmuuss586 发表于 2015-7-2 20:32
时钟低的时候,中断程序太长了,处理过来了吧;

优化中断程序,操作寄存器;

请问你碰到过这种频率低的时候的这些错误吗?听你说的好像是那么回事,频率高了就完全没问题。
玛尼玛尼哄 发表于 2015-7-3 16:26 | 显示全部楼层
if(i+20 <= RxCounter)
mmuuss586 发表于 2015-7-3 19:18 | 显示全部楼层
lizhengfsm 发表于 2015-7-3 12:36
请问你碰到过这种频率低的时候的这些错误吗?听你说的好像是那么回事,频率高了就完全没问题。 ...

我没做过这种试验;
Thor9 发表于 2015-7-3 21:06 | 显示全部楼层
中断程序太长了
豆腐块 发表于 2015-7-3 21:07 | 显示全部楼层
4M的时候就不能用了,

4M时钟有点低吧
 楼主| lizhengfsm 发表于 2015-7-4 16:36 | 显示全部楼层
mmuuss586 发表于 2015-7-3 19:18
我没做过这种试验;

嗯,谢谢你,改了程序之后确实解决了问题,频率可以降到2M了,再低就不行了,感觉中断程序没法再优化了,不过也满足要求了
 楼主| lizhengfsm 发表于 2015-7-4 16:37 | 显示全部楼层

嗯,现在可以低到2M了,是中断程序太长了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部