最近用STM8S105K4做了一个小玩意,通过LIN总线和其他设备通讯。
按例程写了程序,在线调试也走通了,但是烧录入芯片后,就没有输出,感觉是整个芯片死机了。通过一段段减小代码的方式,现在基本锁定问题在UART2->CR2 |= 0x01;,只要这行代码运行,程序就死机,但是在线调试有没有问题。
不知道有人解释一下这是为什么吗?
unsigned char *LIN_Send(unsigned char ch)
{
unsigned char TEMP[9];
unsigned char i=0;
unsigned int Num = 0;
UART2->CR2 |= 0x01; // 将UART_CR2的SBK位置1来请求发送断开符+分界符
UART_SendChar(0x55); // 对UART_DR写入0x55来请求发送同步域。
UART_SendChar(ch); // 对UART_DR写入被保护识别符值来请求发送识别符域
delay_ms(20);
UART2->SR &= 0xDF;
for (i = 0; i < 9; i++)
{
do
{
delay_ms(2);
Num++;
}
while(((UART2->SR & 0x20) == 0x00) && (Num<40));
TEMP[i] = UART_ReceChar();
Num=0;
}
return TEMP;
}
|