欢迎来到天天文库
浏览记录
ID:43485875
大小:1.01 MB
页数:9页
时间:2019-10-08
《STM32基于Nucleo板CAN总线的建立》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、STM32基于Nucleo板CAN总线的建立前言STM32NUCLEO开发平台是ST最新发布的易用性好、可扩展性佳的低成本平台。开发平台具有mbed功能支持Arduino接口,同时还提供STMorpho扩展排针,可连接微控制器的所有周边外设,可以利用Arduino巨大生态系统优势,便于快速实现STM32学习和评估!这儿我们评估它的CAN外设功能。一、环境搭建1、软件:STM32CubeRepositorySTM32Cube_FW_F1_V1.3.0ProjectsSTM3210E_EVAL
2、ExamplesCANCAN_NetworkingEWARM2、硬件:NUCLEO-F103RB(STM32F103RBT6)3、原理图如下:上面原理图是针对SN65HVD230的,因为PB8是CAN_TX,是MCU端的发送,需要到CANtransfer的输入引脚,即引脚D(Driverinput);因为PB9是CAN_RX,是MCU端的接收,是CANtransfer的输出引脚,即引脚R(Recvoutput);二、Porting由于参考的是STM3210E_EVAL的示例程序,在用到ST
3、M32F103RBT6的Nucleo板子上的时候,需要做一些porting的工作。1、系统时钟在10E的EVAL板子上,使用的是HSE,而Nucelo上默认的是没有焊接HSE,所以使用到的是HIS;利用CubeMX生成代码:系统时钟为36MHz;供给CAN外设的时钟:是APB1的时钟18MHz;voidSystemClock_Config(void){RCC_OscInitTypeDefRCC_OscInitStruct;RCC_ClkInitTypeDefRCC_ClkInitStruct;RC
4、C_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState=RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue=16;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSI_DIV2;RCC_OscInitStruct.PLL
5、.PLLMUL=RCC_PLL_MUL9;HAL_RCC_OscConfig(&RCC_OscInitStruct);RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK
6、RCC_CLOCKTYPE_SYSCLK
7、RCC_CLOCKTYPE_PCLK1
8、RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivid
9、er=RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_1);HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);HAL_SYSTICK_CLKSourceConfig(SYSTICK
10、_CLKSOURCE_HCLK);/*SysTick_IRQninterruptconfiguration*/HAL_NVIC_SetPriority(SysTick_IRQn,0,0);}2、CAN的接收/发送引脚仍然可以都为PB8(TX)和PB9(RX),不需要改变;3、CAN的波特率(自己想设置的是500K):CanHandle.Init.Mode=CAN_MODE_NORMAL;CanHandle.Init.SJW=CAN_SJW_1TQ;CanHandle.Init.BS1=CAN_BS
11、1_3TQ;//TS1[3:0]+1CanHandle.Init.BS2=CAN_BS2_5TQ;//TS2[2:0]+1CanHandle.Init.Prescaler=4;//BRP[9:0]+1CanHandle.Init.NART=ENABLE;所以,理论上,根据计算公式,NominalBitTime=1×tq+tBS1+tBS2=(TS1[3:0]+1+TS2[2:0]+1+1)*(BRP[9:0]+1)xtPCLK;所以,NominalBitTime=9*4*tPCLK
此文档下载收益归作者所有