打印

STM32的LIN问题

[复制链接]
6599|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juanhao|  楼主 | 2012-4-25 19:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初始化:
//---时钟设置
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

//---USART2串口配置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
//---开启中断
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
//---LIN初始化
void Uart2_Lin_Configuration(void)
{
  USART_InitTypeDef USART_InitStructure;
   USART_InitStructure.USART_BaudRate = 19200;
   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
   USART_InitStructure.USART_StopBits = USART_StopBits_1;
   USART_InitStructure.USART_Parity = USART_Parity_No;
   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  /* Configure USARTy */
   USART_Init(USART2, &USART_InitStructure);
USART_LINBreakDetectLengthConfig(USART2,USART_LINBreakDetectLength_11b);
USART_LINCmd(USART2,ENABLE);
}

然后发送断开符:
USART_ITConfig(USART2, USART_IT_LBD, ENABLE);
USART_SendBreak(USART2);

但是在USART2的TX脚上没有看到低的断开符号。请问为什么?
沙发
juanhao|  楼主 | 2012-5-1 00:07 | 只看该作者
再加个USART_CMD(USART2)就好了,结贴

使用特权

评论回复
板凳
laven173| | 2015-5-7 21:52 | 只看该作者
juanhao 发表于 2012-5-1 00:07
再加个USART_CMD(USART2)就好了,结贴

我来挖个坟。。。
那个,你这样是可以进行LIN通讯的,但是我有个问题,当作为从节点的时候,要调用哪个函数来识别间隔场啊?就是从节点要怎么能很精确地判断主节点发的13个0?我现在只是判断接收数据是不是0x00,这样软件设计的时候有问题,如果后面的数据有0x00再接0x55的时候很容易出问题,请教stm32怎么识别13个0的,谢谢!

使用特权

评论回复
地板
08逍客2010| | 2016-4-15 15:36 | 只看该作者
laven173 发表于 2015-5-7 21:52
我来挖个坟。。。
那个,你这样是可以进行LIN通讯的,但是我有个问题,当作为从节点的时候,要调用哪个函 ...

你这个问题解决了么?

使用特权

评论回复
5
shiqinghai| | 2016-8-17 09:26 | 只看该作者
laven173 发表于 2015-5-7 21:52
我来挖个坟。。。
那个,你这样是可以进行LIN通讯的,但是我有个问题,当作为从节点的时候,要调用哪个函 ...

从节点检测13个0,应该是USART_GetITStatus(USART1, USART_IT_LBD) != RESET,即开LBD中断,但是我发现可以进这个LBD中断,程序就会卡死在这,不清楚为什么?我现在也是按收到的数据是不是0X00来判断的,这样的程序设计也是有问题的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

187

帖子

0

粉丝