我用stm8l052c6t6 gpio 模拟串口, 发送正常,接收异常
时间:10-02
整理:3721RD
点击:
现在我的模拟串口和PC端通信正常, 和我们的光电模块终端通信的时候,接收的数据有问题, 但是截取报文, pc解析正常,说明还是我的串口解析的问题。
以下是pc 解析的数据(正确的)
FE FE FE 68 10 14 00 00 00 00 00 00 81 09 90 1F 00 00 07 01 00 00 FF CC 16
我的串口解析的数据:
FE FE FE 68 10 14 00 00 00 00 00 00 81 4B 90 FB 1C 00 07 01 00 00 FF 63 B3 FC
我的思路是接收引脚外部中断,进入中断后关闭中断, 延时一段时间, 开启定时器, 依次检测引脚电平, 读完8个数据位后,开始时钟同步,即检测一个下降沿,开始下一个字节的读取。
以下是我的时钟同步部分代码
/*
* 同步串口时钟
*/
unsigned long my_count = 0;
void sync_clock(void)
{
BitStatus old_val, new_val;
disableInterrupts();
old_val = read_rx_line();
disableInterrupts();
while(my_count< 5000)
{
new_val = read_rx_line();
// 检测到下降沿,即起始位
if(old_val == SET && new_val== RESET)
break;
old_val = new_val;
my_count++;
}
my_count = 0;
enableInterrupts();
rx_flag = 0;
//stop timer
TIM3->CR1 &= (uint8_t)(~TIM_CR1_CEN);
TIM3->CR1 &= ~TIM_CR1_CEN;
TIM3->CNTRH = 0;//timer3_val >> 8;
TIM3->CNTRL = 5;//timer3_val & 0xff;
TIM3->CR1 |= TIM_CR1_CEN;
}
我有以下疑问, 异步通信每一个字节都是相互独立的,每个字节停止位都进行了时钟同步,不存在累积误差,前面的数据正常, 中间的数据突然异常, 初步断定是中断引起的, 但是除了用于产生接收中断的定时器3 以外, 我没有开其他中断啊,降低波特率也不行, 搞了好多天, 求大神们给我支支招啊,万分感谢!
以下是pc 解析的数据(正确的)
FE FE FE 68 10 14 00 00 00 00 00 00 81 09 90 1F 00 00 07 01 00 00 FF CC 16
我的串口解析的数据:
FE FE FE 68 10 14 00 00 00 00 00 00 81 4B 90 FB 1C 00 07 01 00 00 FF 63 B3 FC
我的思路是接收引脚外部中断,进入中断后关闭中断, 延时一段时间, 开启定时器, 依次检测引脚电平, 读完8个数据位后,开始时钟同步,即检测一个下降沿,开始下一个字节的读取。
以下是我的时钟同步部分代码
/*
* 同步串口时钟
*/
unsigned long my_count = 0;
void sync_clock(void)
{
BitStatus old_val, new_val;
disableInterrupts();
old_val = read_rx_line();
disableInterrupts();
while(my_count< 5000)
{
new_val = read_rx_line();
// 检测到下降沿,即起始位
if(old_val == SET && new_val== RESET)
break;
old_val = new_val;
my_count++;
}
my_count = 0;
enableInterrupts();
rx_flag = 0;
//stop timer
TIM3->CR1 &= (uint8_t)(~TIM_CR1_CEN);
TIM3->CR1 &= ~TIM_CR1_CEN;
TIM3->CNTRH = 0;//timer3_val >> 8;
TIM3->CNTRL = 5;//timer3_val & 0xff;
TIM3->CR1 |= TIM_CR1_CEN;
}
我有以下疑问, 异步通信每一个字节都是相互独立的,每个字节停止位都进行了时钟同步,不存在累积误差,前面的数据正常, 中间的数据突然异常, 初步断定是中断引起的, 但是除了用于产生接收中断的定时器3 以外, 我没有开其他中断啊,降低波特率也不行, 搞了好多天, 求大神们给我支支招啊,万分感谢!