打印
[STM32L1]

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

[复制链接]
2121|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
时钟低的时候,中断程序太长了,处理过来了吧;

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

请问你碰到过这种频率低的时候的这些错误吗?听你说的好像是那么回事,频率高了就完全没问题。

使用特权

评论回复
5
玛尼玛尼哄| | 2015-7-3 16:26 | 只看该作者
if(i+20 <= RxCounter)

使用特权

评论回复
6
mmuuss586| | 2015-7-3 19:18 | 只看该作者
lizhengfsm 发表于 2015-7-3 12:36
请问你碰到过这种频率低的时候的这些错误吗?听你说的好像是那么回事,频率高了就完全没问题。 ...

我没做过这种试验;

使用特权

评论回复
7
Thor9| | 2015-7-3 21:06 | 只看该作者
中断程序太长了

使用特权

评论回复
8
豆腐块| | 2015-7-3 21:07 | 只看该作者
4M的时候就不能用了,

4M时钟有点低吧

使用特权

评论回复
9
lizhengfsm|  楼主 | 2015-7-4 16:36 | 只看该作者
mmuuss586 发表于 2015-7-3 19:18
我没做过这种试验;

嗯,谢谢你,改了程序之后确实解决了问题,频率可以降到2M了,再低就不行了,感觉中断程序没法再优化了,不过也满足要求了

使用特权

评论回复
10
lizhengfsm|  楼主 | 2015-7-4 16:37 | 只看该作者

嗯,现在可以低到2M了,是中断程序太长了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝