完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位前辈,请问一下,can模块是不是和tim1(用来产生6路pwm波)有冲突?没有用can模块的时候pwm波正常,只要启用can模块,pwm占空比固定在50%,不能调;
备注:芯片配置我是用cubemx生成的; 有哪位知道的吗? 非常感谢! |
|
相关推荐
17个回答
|
|
本帖最后由 ltpgt 于 2016-11-25 15:21 编辑
最新发现,在cubemx自动生成的代码里,加入几个nop就可以调整pwm占空比了,好奇怪。加的代码见下面红色部分。 有没有高人能分析下原因啊? /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_CAN1_Init(); __NOP(); __NOP(); __NOP(); __NOP(); MX_TIM1_Init(); /* USER CODE BEGIN 2 */ |
|
|
|
下面是stm32cubemx自动生成的代码,MCU是405RG(64pin); 把 MX_CAN1_Init()屏蔽掉后PWM正常
/* CAN1 init function */ static void MX_CAN1_Init(void) { hcan1.Instance = CAN1; hcan1.Init.Prescaler = 16; hcan1.Init.Mode = CAN_MODE_NORMAL; hcan1.Init.SJW = CAN_SJW_1TQ; hcan1.Init.BS1 = CAN_BS1_1TQ; hcan1.Init.BS2 = CAN_BS2_1TQ; hcan1.Init.TTCM = DISABLE; hcan1.Init.ABOM = DISABLE; hcan1.Init.AWUM = DISABLE; hcan1.Init.NART = DISABLE; hcan1.Init.RFLM = DISABLE; hcan1.Init.TXFP = DISABLE; if (HAL_CAN_Init(&hcan1) != HAL_OK) { Error_Handler(); } } /* TIM1 init function */ static void MX_TIM1_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig; TIM_OC_InitTypeDef sConfigOC; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; htim1.Instance = TIM1; htim1.Init.Prescaler = 0; htim1.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED3; htim1.Init.Period = 8000; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; if (HAL_TIM_Base_Init(&htim1) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_ENABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { Error_Handler(); } sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE; sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE; sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.DeadTime = 20; sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_ENABLE; if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) { Error_Handler(); } HAL_TIM_MspPostInit(&htim1); } |
|
|
|
|
|
|
|
貌似也遇见过,一开CAN时钟就有问题。
|
|
|
|
来张配置图,让大家帮你分析下
|
|
|
|
帮顶,帮顶
|
|
|
|
我个人感觉是中断优先级的问题。
|
|
|
|
帮顶,没有相关开发经历
|
|
|
|
|
|
|
|
|
|
|
|
我个人感觉是中断优先级的问题
|
|
|
|
|
|
|
|
|
|
|
|
看不到图片 |
|
|
|
我同时启用CAN1 Master mode和TIM1 6路PWM,怎么提示有冲突呢? |
|
|
|
之前不会发图片,直接插入到文本编辑框里,编辑的时候有图片,发出去却看不到,老是发不出来,,现已改成附件形式。 |
|
|
|
没有的,是两个独立的,只要是引脚上不冲突就可惜了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2373 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1257 浏览 0 评论
3206 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2977 浏览 4 评论
5546 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-23 15:06 , Processed in 0.657571 second(s), Total 70, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号