你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8S105K4 LIN问题

[复制链接]
崔志强 提问时间:2022-10-31 14:55 / 已解决
最近用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;
}


收藏 评论2 发布时间:2022-10-31 14:55

举报

2个回答
xmshao 最优答案 回答时间:2022-10-31 15:32:52
你如果启用了UART中断收发,注意对中断请求标志及时清零。另外,是否开启了溢出中断,这些都检查下。相信你也大致知道问题方向了。加油!
崔志强 回答时间:2022-11-18 17:04:30
xmshao 发表于 2022-10-31 15:32
你如果启用了UART中断收发,注意对中断请求标志及时清零。另外,是否开启了溢出中断,这些都检查下。相信你 ...

UART2->CR2 = 0x0C;  // 0x2C=0010 1100
原来UART2的CR2是设置成0x2C的,改成0x0C后,LIN收发正常。
CR2的第5位是RIET,的确与中断有关。但是到最终程序完成还是没想通,这里设成1之后为什么死机,调试的时候又没问题?
而且被引用的那个程序也是这样设置,就没有问题,我这里复制过来就不行。

RIEN: 接收中断使能,软件对该位置位或者清零
0:中断被禁止;
1:当USART_SR中的OR或者RXNE为1时,产生USART中断。


关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版