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; } } 那位大神知道这是怎么回事吗? |
STM8S003F3U6 请求各位大佬支援,但是遇到如下问题。。。这样就一定是这颗芯片的问题吗?
STVD如何生成库文件
STM8 flash 库函数 startaddress = startaddress + ((uint32_t)BlockNum * FLASH_BLOCK_S
stm 8 flash 在RAM运行代码的问题,是不是库函数有问题 Library call (?sll32_l0_l0_a) from within a
STM 有能替代MCHC912B32CFUE8 / NXP的型号吗?
STM8S的CAN总线使用
STM8L151在使用DAC功能后严重发热
STM8 IIC SLAVE 400K
STM8S 定时器1互补输出pwm
STM8S003F3 NRST电压低,无法开机
评分
查看全部评分
m=m+1 通过在中断中禁止uart1的接收使能 UART1->CR2 &= ~0x20;//禁止接收中断 可以解决,能够正确的收发一帧数据,但是在数据处理完后 UART1->CR2 |= 0x20 接收使能位也不置1,而且进不了接收中断函数,你清楚这是为什么吗? 接收完一帧数据IDLE=1