你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
STM32F103RB 无法进入CAN中断的问题
[复制链接]
MissOne
提问时间:2020-12-22 10:22 /
问答
是否解决:
鄙人买了一块NUCLEO F103RB的开发板,第一次玩STM系列的片子。使用STM32Cube和STM32MX开发,确实很好用,快捷方便。
IO,定时器等等资源很快就调试完了。现在有个小问题,请教下大家。是关于CAN。
103只有一路CAN,我配置完成后,收发正常:示波器可见波形,且使用zlg-CANTEST调试正确,但是MCU的收发是做在定时器中的。因为CAN的收发中断都不能进去,请教大家。
网上有说是没配置过滤,在下也尝试了,无计可施。
赞
0
收藏
0
评论
13
分享
发布时间:2020-12-22 10:22
举报
请先
登录
后回复
13个回答
MissOne
回答时间:2020-12-22 10:25:45
a4a.1 32b0c
static void MX_CAN_Init(void)
{
/* USER CODE BEGIN CAN_Init 0 */
/* USER CODE END CAN_Init 0 */
/* USER CODE BEGIN CAN_Init 1 */
/* USER CODE END CAN_Init 1 */
hcan.Instance = CAN1;
hcan.Init.Prescaler = 8;
hcan.Init.Mode = CAN_MODE_NORMAL;
hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
hcan.Init.TimeSeg1 = CAN_BS1_3TQ;
hcan.Init.TimeSeg2 = CAN_BS2_4TQ;
hcan.Init.TimeTriggeredMode = DISABLE;
hcan.Init.AutoBusOff = DISABLE;
hcan.Init.AutoWakeUp = DISABLE;
hcan.Init.AutoRetransmission = DISABLE;
hcan.Init.ReceiveFifoLocked = DISABLE;
hcan.Init.TransmitFifoPriority = DISABLE;
if (HAL_CAN_Init(&hcan) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN CAN_Init 2 */
/* USER CODE END CAN_Init 2 */
}[code]void CAN_SettingData_Init(void)
{
//ID
canHeader.StdId = 0x770;
//数据长度
canHeader.DLC = 8;
//设置为标准帧0,扩展�????1
canHeader.IDE=0;
//0数据帧,1远程�????
canHeader.RTR=0;
canFilterConfig.FilterBank = 0;//过滤器组0
canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;//标识符屏蔽位模式
canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;//滤波器位宽为单个32�???
canFilterConfig.FilterIdHigh =0; //要过滤的ID高位,因为这个代码设置不是过滤ID的,�???以随意填了一个ID
canFilterConfig.FilterIdLow =0;//要过滤的ID低位
canFilterConfig.FilterMaskIdHigh = 0; //这里设置接收任意ID的CAN数据
canFilterConfig.FilterMaskIdLow = 0; //0表示接收来自发�?�端任意ID的数�???
canFilterConfig.FilterFIFOAssignment =CAN_FILTER_FIFO0;//过滤器指向FIFO0�???
canFilterConfig.SlaveStartFilterBank=14;
canFilterConfig.FilterActivation = ENABLE;//使能过滤�???
}[code]int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_CAN_Init();
MX_TIM1_Init();
MX_TIM2_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
pwmCount = 0;
HAL_TIM_Base_Start_IT(&htim1);
HAL_TIM_PWM_Start_IT(&htim2,TIM_CHANNEL_1);
//�???定要设置过滤�???,不然无法接收数据
CAN_SettingData_Init();
HAL_CAN_ConfigFilter(&hcan, &canFilterConfig);
HAL_CAN_Start(&hcan);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
复制代码
[/code][/code]
赞
0
评论
回复
支持
反对
MissOne
回答时间:2020-12-22 10:26:19
a4a.1 32b0c
此处无响应:
void USB_HP_CAN1_TX_IRQHandler(void)
{
/* USER CODE BEGIN USB_HP_CAN1_TX_IRQn 0 */
/* USER CODE END USB_HP_CAN1_TX_IRQn 0 */
HAL_CAN_IRQHandler(&hcan);
/* USER CODE BEGIN USB_HP_CAN1_TX_IRQn 1 */
/* USER CODE END USB_HP_CAN1_TX_IRQn 1 */
}
/**
* @brief This function handles USB low priority or CAN RX0 interrupts.
*/
void USB_LP_CAN1_RX0_IRQHandler(void)
{
/* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 0 */
/* USER CODE END USB_LP_CAN1_RX0_IRQn 0 */
HAL_CAN_IRQHandler(&hcan);
/* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 1 */
/* USER CODE END USB_LP_CAN1_RX0_IRQn 1 */
}
复制代码
赞
0
评论
回复
支持
反对
MissOne
回答时间:2020-12-22 10:26:57
a4a.1 32b0c
此处正常:
void Event_100ms()
{
//100mS 事件
if(count100ms++ > 1000)
{
count100ms = 0;
ld2state = !ld2state;
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, ld2state);
if(isBroadcast!=0)
{
aData[0] = (uint8_t)(runningTimeUs>>8);
aData[1] = (uint8_t)runningTimeUs;
HAL_CAN_AddTxMessage(&hcan,&canHeader,aData,&txMailbox);
}
CanReceiveData(&hcan,CAN_RX_FIFO0);
}
}
复制代码
赞
0
评论
回复
支持
反对
MissOne
回答时间:2020-12-22 13:26:40
a4a.1 32b0c
环回模式也不能进入中断
赞
0
评论
回复
支持
反对
大陶
回答时间:2020-12-22 15:24:32
a0a.1 32b0c
先试一下回环模式,再看一下中断的优先级。
赞
0
评论
回复
支持
反对
MissOne
回答时间:2020-12-22 16:03:15
a4a.1 32b0c
回环模式也进不了中断,中断优先级有尝试调整过,没有效果!
赞
0
评论
回复
支持
反对
MissOne
回答时间:2020-12-22 16:03:58
a4a.1 32b0c
dataozi 发表于 2020-12-22 15:24
先试一下回环模式,再看一下中断的优先级。
回环模式也进不了,优先级也调整过,没有效果
赞
0
评论
回复
支持
反对
MissOne
回答时间:2020-12-23 08:31:41
a4a.1 32b0c
回环模式也进不了中断,优先级也尝试修改,未有效果
赞
0
评论
回复
支持
反对
MissOne
回答时间:2020-12-23 08:41:13
a4a.1 32b0c
dataozi 发表于 2020-12-22 15:24
先试一下回环模式,再看一下中断的优先级。
回环也不行,优先级也有修改,还是无效果
赞
0
评论
回复
支持
反对
MissOne
回答时间:2020-12-23 10:37:15
a4a.1 32b0c
已解决,固件使用的1.80,必须要激活:HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO1_MSG_PENDING|CAN_IT_RX_FIFO0_MSG_PENDING);
赞
0
评论
回复
支持
反对
MissOne
回答时间:2020-12-23 10:39:38
a4a.1 32b0c
已解决,最新的固件库1.83,要使用这个函数,激活中断事件:
HAL_CAN_ActivateNotification
赞
0
评论
回复
支持
反对
MissOne
回答时间:2021-1-6 13:27:40
a4a.1 32b0c
已找到原因:没有激活中断,大意了。这个函数,HAL_CAN_ActivateNotification
赞
0
评论
回复
支持
反对
MissOne
回答时间:2021-1-19 09:05:21
a0a.1 32b0c
解决了:用的hal库,要用这个开中断HAL_CAN_ActivateNotification
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
回环模式也进不了,优先级也调整过,没有效果
回环也不行,优先级也有修改,还是无效果
HAL_CAN_ActivateNotification