STM8S 串口通讯问题
while(1)//主程序循环,反复执行循环体里的语句{
if(rece_flag==3)
{
GPIOD->ODR |= GPIO_PIN_7;//transmit
for(i=0 ; i<3; i++)
{
if((UART1->SR & 0x80) == 0x80)
UART1->DR = data;
}
rece_flag=0;
GPIOD->ODR &=~GPIO_PIN_7;//receive
}
}
程序每次执行到for循环,只能执行一次,走到i++时,程序跑飞,是怎么回事?
data是不是越界了 data 的长度是3,应该没越界。 while循环加个延时,发送速率降低一点,你是怎么判定程序已经跑飞了的? 发送速率是9600,很低了,在STM32芯片上也是这么操作的;
执行i++时,程序的单步执行就进行不了,会直接变成运行状态。 有没有开中断什么的,是不是别的地方影响了 有 usart1的接收中断 ,中断中连续接收三个字节,接收个数保存在rece_flag变量中,rece_flag = 3 就把接收的数据发送出去。再收到返回值后才会再次发送。 本帖最后由 子曰好人 于 2018-7-20 17:20 编辑
annqian 发表于 2018-7-17 08:30
发送速率是9600,很低了,在STM32芯片上也是这么操作的;
执行i++时,程序的单步执行就进行不了,会直接变 ...
额,尽量点回复,不要跟帖,我都不知道你回复我了:L,我的意思是发送一次数据之后隔一段时间再发送看看什么情况,如果方便把程序上传上来帮你看看 调试的时候试试这一句:UART1->DR = data;
检查一下DR中的数据是否得到了写入。
顺便问一下,你的硬件连接,不会是把TX和RX直接短接吧? 是全部代码了吗?是不是‘i’没有定义啊
页:
[1]
2