你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
回环模式也进不了,优先级也调整过,没有效果
回环也不行,优先级也有修改,还是无效果
HAL_CAN_ActivateNotification