完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{ uint8_t receData = 0; if(ComuData.Chan==0) { receData = (uint8_t)UART1->DR; ComuData.Data[ComuData.Len++]= receData; // if(ComuData.Count >= 6) // { // ComuData.Count = 0; // ComuData.Len = 6; // } } }//异常地址的位置 void cmd_Handle(void) { uint8_t m=0; // uint8_t data[6]={0x01,0x10,0x11,0x02,0x8D,0x8C}; // Crc_Vrfy_String_TE(data, 6); if(ComuData.Len == 6 0x01 == Crc_Vrfy_String_TE( ComuData.Data[0],ComuData.Len) ) { ComuData.Chan =1; //程序可以正常的接收字符,并符合CRC16效验 } else ComuData.Chan =0; if(ComuData.Chan == 1) { GPIOD->ODR |= GPIO_PIN_7;//transmit for(m=0;m< 6;) { UART1->SR =0xBF;//clear TC bit while((UART1->SR 0x80)!= 0x80);//wait data sent to 移位寄存器里 UART1->DR = ComuData.Data[m]; m = m+1;//程序走到这里就中断了 m++;指令也不行,把m++写到for循环里面也不行,停止时就跑到接收中断函数结束处 while ((UART1->SR 0x40)!=0x40);//等待移位寄存器中的数据发送发成 //Sys_Delay(1); } ComuData.Chan=2; } } 那位大神知道这是怎么回事吗? |
|
相关推荐
2个回答
|
|
看一下IDLE(休闲寄存器)的值,有没有改变?
|
|
|
|
在这段代码中,我们可以看到是一个STM8S的中断服务例程(ISR),用于处理UART1的接收中断。这段代码的主要目的是在接收到数据时进行处理。下面是对这段代码的逐行解释:
1. `INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)`:定义了一个中断服务例程,名为UART1_RX_IRQHandler,优先级为18。 2. `{`:开始中断服务例程的代码块。 3. `uint8_t receData = 0;`:定义一个无符号8位整数变量receData,用于存储接收到的数据。 4. `if(ComuData.Chan==0)`:检查ComuData结构体中的Chan成员是否等于0。如果等于0,说明当前通道是有效的,可以继续接收数据。 5. `{`:开始if语句的代码块。 6. `receData = (uint8_t)UART1->DR;`:从UART1的数据寄存器(DR)读取接收到的数据,并将其存储在receData变量中。 7. `ComuData.Data[ComuData.Len++]=receData;`:将接收到的数据存储在ComuData结构体的Data数组中,并将Len成员加1,表示已经接收到的数据长度。 8. `}`:结束if语句的代码块。 9-11. `if(ComuData.Count >= 6)`:这部分代码被注释掉了,但它的意思是检查ComuData结构体中的Count成员是否大于等于6。如果大于等于6,说明已经接收到足够的数据。 12-13. `{`:开始if语句的代码块。 14. `ComuData.Count = 0;`:将Count成员重置为0,表示已经处理完当前的数据。 15. `ComuData.Len = 6;`:将Len成员设置为6,表示已经接收到6个字节的数据。 16. `}`:结束if语句的代码块。 这段代码的主要功能是在接收到数据时将其存储在一个数组中,并在接收到一定数量的数据后进行处理。注意,这段代码中的部分代码被注释掉了,可能需要根据实际需求进行调整。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1364 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1359 浏览 1 评论
780 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
562 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1394 浏览 2 评论
1758浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
484浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
420浏览 3评论
414浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
389浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 05:53 , Processed in 0.808268 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号