打印
[STM32F0]

STM32F042 低功耗STOP模式的CAN唤醒问题

[复制链接]
2813|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanghqi|  楼主 | 2021-8-14 15:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F042在停止模式下,用HALL库,RTC和外部中断都可以唤醒。
用USART也可以在不丢数据的情况下唤醒。

有谁用过CAN唤醒,找不到资料呀。
只看到将CAN接收脚临时改成外部中断,唤醒后再恢复成CAN,这样当前CAN数据会丢失。
我需要每接收一帧数据就唤醒,再立马进STOP模式。
HALL库没找到象USART那样的唤醒函数。

使用特权

评论回复
沙发
zhanghqi|  楼主 | 2021-8-14 15:28 | 只看该作者
本帖最后由 zhanghqi 于 2021-8-14 15:30 编辑

有谁知道咋回事吗

使用特权

评论回复
板凳
zhenykun| | 2021-8-14 15:30 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
地板
zhanghqi|  楼主 | 2021-8-14 15:31 | 只看该作者
/* set the wake-up event:
   * specify wake-up on RXNE flag */
  WakeUpSelection.WakeUpEvent = UART_WAKEUP_ON_READDATA_NONEMPTY;        //;  //UART_WAKEUP_ON_STARTBIT
  if (HAL_UARTEx_StopModeWakeUpSourceConfig(&huart1, WakeUpSelection)!= HAL_OK)
  {
    //Error_Handler();
  }

  /* Enable the UART Wake UP from stop mode Interrupt */
  __HAL_UART_ENABLE_IT(&huart1, UART_IT_WUF);

  /* enable MCU wake-up by UART */
  HAL_UARTEx_EnableStopMode(&huart1);
  HAL_UART_Receive_IT(&huart1, aU1RxBuf, 1);
        
        //CAN
        //__HAL_CAN_ENABLE_IT(&hcan,CAN_IT_WKU);
        //HAL_CAN_Receive_IT(&hcan, CAN_FIFO0);
        
        //MX_RTC_Init();
        HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);        //wake up1 »½ÐÑ
  /* Enter Stop Mode */
  HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);        /////////

  /* Configures system clock after wake-up from STOP: enable HSI and PLL with HSI as source*/
  //SYSCLKConfig_STOP();
  SystemClock_Config();

使用特权

评论回复
5
zwll| | 2021-8-14 18:42 | 只看该作者
例子没有CAN的吧?

使用特权

评论回复
6
juventus9554| | 2021-8-14 18:43 | 只看该作者
CAN的熟练的人不多

使用特权

评论回复
7
zhanghqi|  楼主 | 2021-8-14 18:46 | 只看该作者
期待高手…………,HALL库是不是个半成品?好些驱动没有

使用特权

评论回复
8
lizye| | 2021-8-14 18:48 | 只看该作者
将一个GPIO口并在CAN RX上,专门用作CPU唤醒,减少管脚切换时间。

使用特权

评论回复
9
zhanghqi|  楼主 | 2021-8-14 18:50 | 只看该作者
没用

使用特权

评论回复
10
zhanghqi|  楼主 | 2021-8-14 18:52 | 只看该作者
CAN第一帧数据只能唤醒CPU并且触发CAN错误中断,无**常接收到。

使用特权

评论回复
11
zhanghqi|  楼主 | 2021-8-14 18:54 | 只看该作者
见识了,无~法~正~常接收到都被屏蔽

使用特权

评论回复
12
zwll| | 2021-8-14 18:56 | 只看该作者
CAN总线错误之后,检测到CAN ERROR是超时以及未初始化,在初始化之后 清除错误,CAN总线还是异常 这个问题您解决了吗

使用特权

评论回复
13
pengf| | 2021-8-14 18:59 | 只看该作者
CAN 接收中断是可以从STOP唤醒的,我用过。

使用特权

评论回复
14
jiahy| | 2021-8-14 19:01 | 只看该作者
CAN初始化怎么做的

使用特权

评论回复
15
spark周| | 2021-8-14 19:02 | 只看该作者
您好,我也在调试stm32f042在stop模式下的can接收唤醒,您说的can中断唤醒不知道怎么做,方便指点下吗?

使用特权

评论回复
评论
ZAIXIAGAOGAO 2022-7-9 18:20 回复TA
你好,请问有调试出来吗? 
16
jiajs| | 2021-8-14 19:07 | 只看该作者
把CAN模式设置成自动唤醒模式就可以!AWUM位置1就可以!

使用特权

评论回复
17
zhanghqi|  楼主 | 2021-8-14 19:10 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈        

使用特权

评论回复
18
RunningX| | 2021-8-17 19:59 | 只看该作者
唤醒后第一帧数据不一定能收到吧,因为报文过来的时候,CAN还没初始化。但是因为CAN有重发机制,第一帧没有收到,就再发一帧,那就都好了

使用特权

评论回复
19
Dick Hou| | 2021-8-19 10:52 | 只看该作者
jiajs 发表于 2021-8-14 19:07
把CAN模式设置成自动唤醒模式就可以!AWUM位置1就可以!

那是SLEEP模式用的!楼主要STOP模式

使用特权

评论回复
20
隐去| | 2021-8-27 17:03 | 只看该作者
怎么做的

使用特权

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

本版积分规则

852

主题

11757

帖子

5

粉丝