完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以下是我的定时器配置: APB1时钟为8MHz,tiM_Times在串口接收中断里面被赋值
void TIM_Configuration(u16 TIM_Times) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); /*定时((7999+1)/8M)*TIM_Times=TIM_Times毫秒*/ TIM_TimeBaseInitStructure.TIM_Period = TIM_Times; //自动重装载值 TIM_TimeBaseInitStructure.TIM_Prescaler = 7999; //预分频值 TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; //时钟分割 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数方式 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //允许定时器2的定时中断源 } void TIM2Delay_ms(u16 nTimes) { TIM_Configuration(nTimes); TIM_Cmd(TIM2,ENABLE); //允许定时器2 } 在接收中断里面调用这个函数:TIM2Delay_ms(1000);//定时1秒 在定时器中断里面: void TIM2_IRQHandler(void) { u16 Data_Temp = RxData_Temp[0]<<8 | RxData_Temp[1]; if(TIM_GetITStatus(TIM2,TIM_FLAG_Update) == SET) { TIM_Cmd(TIM2,DISABLE); //关闭定时器2 if(Data_Temp == 0x4343) FactorySetMode_Flag = SET; RxDataTemp_Len = RxData_Len; //转存接收数据长度 RxData_Len = 0; //接收数据长度归零,为下一次接收数据作准备,若不归零,则下一次收到的数据会接着上一次数据的末尾存放,会出现数据混乱 Data_Receive_Over = SET; //数据接收完毕 TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update); //清定时器2中断标志 } } 我用定时器2是为了在串口接收延时以确认串口的数据接收完毕,由于串口接收的数据没有结束符,也没有固定长度,所以接收数据的时候没办法确认什么时候接收完毕,所以我就用了定时器2,每进入一次接收中断,我就在定时器2中装一个值然后允许开始计数,当数据接收完成后,它全延时一会,时间到后进行定时器中断,在定时器中断里面,我设置一个标志位以说明我的串口数据接收完毕,主程序可以处理它了,而且在定时器中断里面,我还把接收到的数数据长度转存,然后把接收数据长度归零。 把接收长度归零是为了下一次接收数据准备的,若不归零的话,下一次接收数据的时候数据会接着上一次数据末尾存放,这样一来数据就会混乱。 我现在的问题是:串口每次都只能收到最后一个字节,前面所有的数据都丢了,Rx接收缓冲数组中的Rx[0]中始终存放着最后接收到的一个字节,前面所有的数据都丢了; 我在调试的时候,我在定时器中断里面设了一个断点,每次收到数据后立即进入了定时器中断。正是这个原因,每次收到一个字节数据立即进入定时器中断,然后就把接收数据长度归零,故每次都只能收到最后一个字节的数据,是因为每次收到的数据都被存在了接收缓冲数组的开始位置即Rx[0]里面,把上一个字节覆盖了。 所以问题还是比较明确的,就是定时器出问题了,但也不是定时器时间短了,我有论将时间设多久,都是一样,只要收到一个字节数据就立马进入定时器中断,然后把接收数据长度给清零。所以可能是定时器配置出问题了,但是我觉得自己的定时器配置的也没有问题呃,所以请大家帮帮忙,看看配置哪里出问题了。 |
|
相关推荐
4个回答
|
|
应该是TIM_Configuration这个函数一配置,就会产生一次中断。
|
|
|
|
我也遇到这样的问题,Jlink仿真发现:时钟开启一开启就产生一次时钟中断,不知道为啥.IWDG也是这样的现象,用原子的例程也是IWDG的时钟已开启中断标志就被置1了.
|
|
|
|
还有这样的事情发生呃,你们是怎么解决的呢,到现在这个问题都还没解决,改这里改那里,还是不行。如果不用接收延时的方法来确定USART接收完毕的话,那应该怎么做,以解决串口接收完成的问题呢(接收到的数据没有结束符,每条数据长度不一样,不知道怎么解决呃)。大家指点一下呃,呵呵。。。
|
|
|
|
我后来调试的时候也确实发现,单步运行完TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);这一句后,SR寄存器中的UIF就被置位了,也就是配置完定时器UIF就被置位了
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1627 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1550 浏览 1 评论
984 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1601 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
536浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 12:09 , Processed in 0.765426 second(s), Total 52, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号