1. main函数里执行LCD_Clear(LIGHTBLUE),将LCD画成LIGHTBLUE颜 {MOD};
2. 按照定时器中断例子,main函数初始化Tim3: Timerx_Init(5000,7199);
3. 中断处理函数 void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
LCD_ShowString(40, 40, "Tim3");
}
TIM3->SR&=~(1<<0);//清除中断标志位
}
4. main函数
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
LCD_Init();
LCD_Clear(LIGHTBLUE);
Timerx_Init(5000,7199);
while(1)
{
LCD_ShowString(20, 20, "Main");
}
}
现在出现的状况是Timer里显示的"Tim3"字串周围有很多杂点。
这是什么原因啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1. 主线程main里的LCD_Clear(LIGHTBLUE)以及LCD_ShowString(20,20,"Main"); 与Tim3里面的LCD_ShowString(40, 40, "Tim3");是并行的。
2. 也就是说main和Tim3在并行的调用:
1)LCD_SetCursor: 写寄存器R32,R33,
2)LCD_WriteRAM_Prepare: 写寄存器R34,
3)LCD_WR_DATA(POINT_COLOR); 注意:POINT_COLOR是全局变量,
所以,当你真正LCD_WR_DATA画点的时候,R32, R33寄存器里的坐标值可能已经不是之前设置的,而被另一个线程的调用而更改了。而且POINT_COLOR是全局变量,也会是同样的状况,也可能被更改了。所以导致在不该画点的出现花点了。
针对这个问题,如果有操作系统的话,我想可以通过互斥信号量解决。
在目前这样没有系统的情况下,有没有什么解决的方法啊?
一周热门 更多>