STM32的can总线实验心得要点
stm32实训报告经验总结
stm32实训报告经验总结STM32实训报告经验总结一、引言在这次STM32实训中,我深入了解了微控制器的基本原理和操作,学会了使用Keil MDK-ARM软件进行编程,掌握了STM32的GPIO、串口、定时器等基本外设的使用。
通过实际操作,我对于嵌入式系统设计和开发有了更深刻的理解。
二、实训过程1. 基础知识学习:首先,我通过阅读教材和网上资料,学习了微控制器的基本概念、STM32的体系结构和外设特性。
我了解到,STM32是一款功能强大的32位ARM Cortex-M核微控制器,具有丰富的外设接口和强大的处理能力。
2. 开发环境搭建:我按照教程安装了Keil MDK-ARM软件,配置了开发环境。
Keil软件提供了完整的开发工具链,包括代码编辑、编译链接、调试和仿真等功能。
3. 硬件平台搭建:我使用STM32开发板搭建了硬件平台。
我熟悉了开发板的电路原理图和引脚配置,了解了各个外设接口的使用方法。
4. 编程实践:在理解了基本概念和操作方法后,我开始进行编程实践。
我编写了GPIO输入输出、串口通信、定时器中断等程序,通过实际操作掌握了STM32的基本外设使用。
5. 调试与优化:在编程过程中,我遇到了许多问题,通过查阅资料和反复调试,最终解决了问题。
我还对程序进行了优化,提高了程序的效率和稳定性。
三、实训收获通过这次实训,我掌握了STM32微控制器的开发流程和基本外设的使用方法。
我学会了使用Keil MDK-ARM软件进行编程和调试,了解了嵌入式系统设计和开发的实际操作过程。
同时,我在实践中遇到了许多问题,通过解决问题,我提高了解决问题的能力。
四、展望未来这次实训让我对嵌入式系统设计和开发有了更深刻的理解。
在未来的学习和工作中,我将继续深入学习嵌入式系统的相关知识,掌握更多的技能和方法。
同时,我将尝试将所学知识应用到实际项目中,提高自己的实践能力和工程经验。
STM32学习笔记---CAN实验
STM32学习笔记---CAN实验继做了DAC实验后,继续进行第15个实验-CAN实验,本实验Can总线的环回测试,LED2亮----说明100k/S 的轮询方式收发正常。
LED3亮----说明500k/S 的中断方式收发正常。
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;__IO uint32_t CANFLAG = 0;volatile TestStatus TestRx;TestStatus CAN_Polling(void);TestStatus CAN_Interrupt(void);//can设置初始化void CAN_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE); }TestStatus CAN_Polling(void){CAN_InitTypeDef CAN_InitStructure;CAN_FilterInitTypeDef CAN_FilterInitStructure; CanTxMsg TxMessage;CanRxMsg RxMessage;uint32_t i = 0;uint8_t TransmitMailbox = 0;CAN_DeInit(CAN1);CAN_StructInit(&CAN_InitStructure);CAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack; CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=5;CAN_Init(CAN1, &CAN_InitStructure);CAN_FilterInitStructure.CAN_FilterNumber=0;CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_I dMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32 bit;CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;CAN_FilterInit(&CAN_FilterInitStructure);TxMessage.StdId=0x11;TxMessage.RTR=CAN_RTR_DATA;TxMessage.IDE=CAN_ID_STD;TxMessage.DLC=2;TxMessage.Data[0]=0xCA;TxMessage.Data[1]=0xFE;TransmitMailbox=CAN_Transmit(CAN1, &TxMessage);i = 0;while((CAN_TransmitStatus(CAN1, TransmitMailbox) != CANTXOK) && (i != 0xFF)){i++;}i = 0;while((CAN_MessagePending(CAN1, CAN_FIFO0) < 1) && (i != 0xFF)){i++;}RxMessage.StdId=0x00;RxMessage.IDE=CAN_ID_STD;RxMessage.DLC=0;RxMessage.Data[0]=0x00;RxMessage.Data[1]=0x00;CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);if (RxMessage.StdId!=0x11){return FAILED;}if (RxMessage.IDE!=CAN_ID_STD){return FAILED;}if (RxMessage.DLC!=2){return FAILED;}if ((RxMessage.Data[0]<<8|RxMessage.Data[1])!=0xCAFE) {return FAILED;}return PASSED;}TestStatus CAN_Interrupt(void){CAN_InitTypeDef CAN_InitStructure;CAN_FilterInitTypeDef CAN_FilterInitStructure;CanTxMsg TxMessage;uint32_t i = 0;CAN_DeInit(CAN1);CAN_StructInit(&CAN_InitStructure);CAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=1;CAN_Init(CAN1, &CAN_InitStructure);CAN_FilterInitStructure.CAN_FilterNumber=1;CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_I dMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32 bit;CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIF O0;CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;CAN_FilterInit(&CAN_FilterInitStructure);CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);TxMessage.StdId=0x00;TxMessage.ExtId=0x1234;TxMessage.IDE=CAN_ID_EXT;TxMessage.RTR=CAN_RTR_DATA;TxMessage.DLC=2;TxMessage.Data[0]=0xDE;TxMessage.Data[1]=0xCA;CAN_Transmit(CAN1, &TxMessage);CANFLAG = 0xFF;i=0;while((CANFLAG == 0xFF) && (i < 0xFFF)){i++;}if (i == 0xFFF){CANFLAG=0;}CAN_ITConfig(CAN1, CAN_IT_FMP0, DISABLE); return (TestStatus)CANFLAG;}//测试CANvoid TEST_CAN(void){TestRx = CAN_Polling();if (TestRx == FAILED){GPIO_SetBits(GPIOB, GPIO_Pin_5);}else{GPIO_SetBits(GPIOD, GPIO_Pin_6);}TestRx = CAN_Interrupt();if (TestRx == FAILED){GPIO_SetBits(GPIOB, GPIO_Pin_5);}else{GPIO_SetBits(GPIOD, GPIO_Pin_3);}**************NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);************************void USB_LP_CAN1_RX0_IRQHandler(void){CanRxMsg RxMessage;RxMessage.StdId=0x00;RxMessage.ExtId=0x00;RxMessage.IDE=0;RxMessage.DLC=0;RxMessage.FMI=0;RxMessage.Data[0]=0x00;RxMessage.Data[1]=0x00;CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);if((RxMessage.ExtId==0x1234) && (RxMessage.IDE==CAN_ID_EXT)&& (RxMessage.DLC==2) && ((RxMessage.Data[1]|RxMessage.Data[0]<<8)==0xDECA)) {CANFLAG = 1;}else{CANFLAG = 0;}}以下为液晶显示结果。
can总线波形检测实验心得
can总线波形检测实验心得最近,我参加了一次CAN总线波形检测实验,实验的主要目的是了解CAN总线的基本原理和波形特征,并通过实验掌握如何检测CAN总线的波形。
在实验中,我学到了很多有关CAN总线的知识和技能,下面是我的一些心得体会。
首先,我深刻理解了CAN总线是一种高速、可靠的数据传输协议,它可以在多个设备之间进行数据通信。
CAN总线架构中包括控制器(CAN Controller)、收发器(CAN Transceiver)和节点(CAN Node)等组成部分。
控制器是主要的数据处理单元,用于控制数据的收发和处理;收发器负责将控制器的数字信号转换为模拟信号,以及将模拟信号转换为数字信号;节点则是CAN总线上的一个设备,每个节点都有一个唯一的标识符,用于识别发送和接收的数据。
其次,我学会了如何检测CAN总线的波形。
在实验中,我们使用了示波器(Oscilloscope)来检测CAN总线的波形。
示波器是一种用于显示电信号波形的仪器,它可以显示CAN总线上的数字信号波形,并帮助我们分析和判断波形是否正常。
在检测波形时,我们需要注意以下几个方面:1. CAN总线上的波形应该是一个方波,即上升沿和下降沿应该垂直,且幅值应该保持稳定;2. CAN总线上的波形的周期应该保持一致,如果出现周期不一致的情况,可能需要检查CAN总线上的设备是否正常;3. CAN总线上的波形的幅值应该在规定范围内,如果幅值过高或过低,可能会影响数据传输的质量。
最后,我认为这次实验对我来说非常有意义。
通过这次实验,我不仅学习了CAN总线的基本原理和波形特征,还了解了如何使用示波器检测CAN总线的波形。
这对我以后的学习和工作都有很大的帮助。
我相信,在将来的工作中,我会继续努力,不断提高自己的技能和知识水平。
can总线实验报告
can总线实验报告
《CAN总线实验报告》
一、实验目的
本实验旨在通过对CAN总线的实验研究,掌握CAN总线的基本原理、工作方式和应用领域,提高学生对CAN总线技术的理解和应用能力。
二、实验内容
1. CAN总线基本原理的学习和理解
2. CAN总线的工作方式和通信协议的研究
3. CAN总线在汽车电子控制系统中的应用实例分析
4. CAN总线通信协议的实验验证
三、实验步骤
1. 通过文献资料和教材学习CAN总线的基本原理和工作方式
2. 使用CAN总线开发板进行实验,验证CAN总线的通信协议
3. 分析汽车电子控制系统中CAN总线的应用实例
4. 结合实际案例,对CAN总线通信协议进行实验验证
四、实验结果
通过本次实验,我们深入了解了CAN总线的基本原理和工作方式,掌握了CAN总线通信协议的实验验证方法,并对CAN总线在汽车电子控制系统中的应用有了更深入的了解。
实验结果表明,CAN总线作为一种高可靠性、高性能的通信协议,在汽车电子控制系统中具有广泛的应用前景。
五、实验结论
通过本次实验,我们对CAN总线的基本原理、工作方式和应用领域有了更深入
的了解,提高了对CAN总线技术的理解和应用能力。
同时,我们也认识到了CAN总线在汽车电子控制系统中的重要作用,为今后的学习和研究打下了坚实的基础。
综上所述,本次实验取得了良好的实验效果,为我们进一步深入研究CAN总线技术奠定了坚实的基础。
希望通过今后的学习和实践,能够更好地应用CAN总线技术,为汽车电子控制系统的发展做出更大的贡献。
STM32 CAN模块笔记
STM32 CAN模块笔记
1、CAN总线必须加一个终端电阻。
2、CAN_init()函数有如下功能:一、从睡眠模式退出--等待--查询是否退出,退出。
二、进入初始化模式--等待--查询是否进入,进入。
三、配置各寄存器。
四、从初始化模式退出--等待--查询是否退出,退出。
五、进入正常模式--等待--查询是否进入,进入。
退出CAN_init.
3、根据CAN通信协议,发送错误计数器TEC 和接收错误计数器REC,在发送和接收错误后会增加,在发送和接收正确后会减少至0.
4、在初始化寄存器时,需注意自动离线恢复和自动传送使能这两个功能。
5、设置自动传送功能时要注意歧义,失能(表示发送失败后继续发送),使能(表示只发送一次,不管发送结果如何)。
6、试验CAN通信,必须两个节点,如果只有一个节点,根据CAN协议,ACK没回应,发送端会显示发送失败,如果是两个节点,接收端在收到正确数据后会自动让ACK为显性,告诉发送端发送成功。
7、在发送固件库函数里,程序会自动找空邮箱,0-1-2轮询查找,如果没有空邮箱了,程序会返回“4”,表示已无空邮箱使用。
8、。
STM32的can总线实验心得
STM32的can总线实验心得(一) 工业现场总线 CAN 的基本介绍以及 STM32 的 CAN 模块简介首先通读手册中关于CAN的文档,必须精读。
STM32F10xxx 参考手册Rev7V3.pdf/bbs/redirect.php?tid=255&goto=lastpost#lastpos t需要精读的部分为 RCC 和 CAN 两个章节。
为什么需要精读 RCC 呢?因为我们将学习 CAN 的波特率的设置,将要使用到RCC 部分的设置,因此推荐大家先复习下这部分中的几个时钟。
关于 STM32 的 can 总线简单介绍bxCAN 是基本扩展 CAN (Basic Extended CAN) 的缩写,它支持 CAN 协议 2.0A 和 2.0B 。
它的设计目标是,以最小的 CPU 负荷来高效处理大量收到的报文。
它也支持报文发送的优先级要求(优先级特性可软件配置)。
对于安全紧要的应用,bxCAN 提供所有支持时间触发通信模式所需的硬件功能。
主要特点· 支持 CAN 协议 2.0A 和 2.0B 主动模式· 波特率最高可达 1 兆位 / 秒· 支持时间触发通信功能发送· 3 个发送邮箱· 发送报文的优先级特性可软件配置· 记录发送 SOF 时刻的时间戳接收· 3 级深度的2个接收 FIFO· 14 个位宽可变的过滤器组-由整个 CAN 共享· 标识符列表· FIFO 溢出处理方式可配置· 记录接收 SOF 时刻的时间戳可支持时间触发通信模式· 禁止自动重传模式· 16 位自由运行定时器· 定时器分辨率可配置· 可在最后 2 个数据字节发送时间戳管理· 中断可屏蔽· 邮箱占用单独 1 块地址空间,便于提高软件效率(二) STM32 CAN 模块工作模式STM32 的 can 的工作模式分为:/* CAN operating mode */#define CAN_Mode_Normal ((u8)0x00) /* normal mode */#define CAN_Mode_LoopBack ((u8)0x01) /* loopback mode */#define CAN_Mode_Silent ((u8)0x02) /* silent mode */#define CAN_Mode_Silent_LoopBack ((u8)0x03) /* loopback combined with silent mode */在此章我们的 Mini-STM32 教程中我们将使用到CAN_Mode_LoopBack和CAN_Mode_Normal两种模式。
STM32_CAN_Bus调试心得
睡眠模式(低功耗)
*软件通过对CAN_MCR 寄存器的SLEEP位置 1,来请求进入这一模式。在该 模式下,bxCAN 的时钟停止了,但软件仍然可以访问邮箱寄存器。 *当bxCAN 处于睡眠模式,软件想通过对CAN_MCR 寄存器的INRQ位置 1, 来进入初始化式, 那么软件必须同时对SLEEP位清 0才行 *有2种方式可以唤醒(退出睡眠模式)bxCAN :通过软件对SLEEP位清0,
第 4 页 共 11 页
GZHU
Electronic Association
或硬件检测 CAN 总线的活动。 工作流程 那么究竟can是怎样发送报文的呢? 发送报文的流程为: 应用程序选择1个空发送邮箱;设置标识符,数据长度和待发送数据; 然后对CAN_TIxR 寄存器的 TXRQ位置 1,来请求发送。TXRQ位置 1后,邮箱 就不再是空邮箱;而一旦邮箱不再为空,软件对邮箱寄存器就不再有写的权 限。 TXRQ位置 1后, 邮箱马上进入挂号状态, 并等待成为最高优先级的邮箱, 参见发送优先级。一旦邮箱成为最高优先级的邮箱,其状态就变为预定发送 状态。 一旦 CAN总线进入空闲状态, 预定发送邮箱中的报文就马上被发送 (进 入发送状态)。一旦邮箱中的报文被成功发送后,它马上变为空邮箱;硬件 相应地对CAN_TSR 寄存器的RQCP和 TXOK位置1,来表明一次成功发送。 如果发送失败,由于仲裁引起的就对CAN_TSR 寄存器的ALST位置1,由于 发送错误引起的 就对 TERR位置 1。 原来发送的优先级可以由标识符和发送请求次序决定: 由标识符决定 当有超过1个发送邮箱在挂号时,发送顺序由邮箱中报文的标识符决定。根 据CAN 协议,标 识符数值最低的报文具有最高的优先级。如果标识符的值相等,那么邮箱号 小的报文先被发 送。 由发送请求次序决定 通过对CAN_MCR 寄存器的TXFP位置 1,可以把发送邮箱配置为发送 FIFO 。 在该模式下,发送的优先级由发送请求次序决定。 该模式对分段发送很有用。 时间触发通信模式 在该模式下,CAN 硬件的内部定时器被激活,并且被用于产生时间戳,分别 存储在 CAN_RDTxR/CAN_TDTxR 寄存器中。内部定时器在接收和发送的帧起始位 的采样点位置被采样,并生成时间戳(标有时间的数据)。 接着又是怎样接收报文的呢? 接收管理 接收到的报文,被存储在 3级邮箱深度的FIFO 中。 FIFO 完全由硬件来管理, 从而节省了 CPU 的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取 FIFO 输出邮箱,来读取 FIFO中最先收到的报文。 有效报文 根据 CAN协议,当报文被正确接收(直到 EOF域的最后 1位都没有错误), 且通过了标识符 过滤,那么该报文被认为是有效报文。
stm32心得
stm32心得STM32是一款广泛应用于嵌入式系统开发的微控制器系列,由意法半导体(STMicroelectronics)公司推出。
作为一名嵌入式系统开发者,我在使用STM32的过程中积累了一些心得体会。
STM32具有强大的性能和丰富的外设资源,能够满足各种不同应用场景的需求。
其处理器核心采用ARM Cortex-M系列,性能强劲且低功耗,能够高效地运行复杂的算法和任务。
此外,STM32系列芯片还配备了丰富的外设,如通用串行总线(USART)、通用串行接口(SPI)、通用并行接口(GPIO)等,方便开发者进行各种外设的连接和控制。
这些外设的丰富性使得STM32在各种应用领域都有着广泛的应用。
STM32具有灵活的软件开发环境,便于开发者进行程序编写和调试。
ST公司提供了一套完整的开发工具链,包括集成开发环境(IDE)、编译器、调试器等,使得开发者可以方便地进行代码编写、编译和调试。
同时,ST公司还提供了丰富的软件库和示例代码,开发者可以借助这些资源快速上手,降低开发难度和时间成本。
STM32系列具有良好的可扩展性和兼容性。
ST公司推出了多个型号和系列的STM32芯片,覆盖了不同性能和功能需求的应用场景。
开发者可以根据具体需求选择适合的芯片型号,从而灵活地进行系统设计。
此外,STM32系列还具有良好的软件和硬件兼容性,开发者可以方便地迁移和复用代码,提高开发效率和代码质量。
在实际的项目开发中,我深刻体会到了STM32的优势和便利性。
例如,我曾经开发过一个智能家居系统,利用STM32控制各种家电设备的开关和状态监测。
借助STM32丰富的外设资源,我可以轻松地实现各种设备的连接和控制,而且性能稳定可靠。
同时,STM32的软件开发环境也大大提高了我的开发效率,我可以快速编写和调试代码,快速迭代和优化系统功能。
总结起来,STM32是一款强大而灵活的微控制器系列,具有丰富的外设资源、灵活的软件开发环境和良好的可扩展性和兼容性。
can总线波形检测实验心得
can总线波形检测实验心得
在进行CAN总线波形检测实验之前,我们首先需要了解CAN总线的基本原理和特性。
CAN总线是一种常见的工业控制网络,具有高速、可靠、抗干扰等特点。
在实际应用中,我们需要对CAN总线的波形进行检测,以验证其正常工作。
下面是我在进行CAN总线波形检测实验中的一些心得体会。
首先,我们需要准备一些基本的设备和工具,例如CAN总线分析仪、示波器、信号发生器等。
在进行波形检测之前,我们需要对这些设备进行正确的连接,以确保信号正常传输。
同时,我们需要对所使用的设备进行正确的配置,例如设置波特率、校验模式、帧格式等。
其次,在进行波形检测之前,我们需要先了解CAN总线的标准波形,以便于对波形进行比较和分析。
在实际检测过程中,我们需要观察CAN总线上的各种信号波形,例如起始边沿、同步边沿、数据帧等。
通过对这些波形的分析,我们可以判断CAN总线的工作状态是否正常。
最后,我们需要对检测结果进行分析和处理。
在实际应用中,我们需要对CAN总线上的各种异常情况进行诊断和处理,以确保系统的稳定运行。
例如,当出现误码率高、总线负载过大等情况时,我们需要及时采取相应的措施,以减少故障的发生。
总之,进行CAN总线波形检测实验是一个较为复杂的过程,需要我们具备一定的知识和技能。
通过不断地学习和实践,我们可以更好地掌握CAN总线的工作原理和波形检测技能,从而为工业控制系统的设计和维护提供更加可靠的保障。
学习stm32工作总结
学习stm32工作总结学习STM32工作总结。
在过去的一段时间里,我一直致力于学习STM32微控制器的相关知识和技能。
通过不懈的努力和学习,我对STM32的工作原理和应用有了更深入的了解,并取得了一些进步。
在这篇文章中,我将总结我学习STM32的经验和收获,希望能够与大家分享。
首先,我深入研究了STM32微控制器的基本原理和架构。
我学习了STM32的内部结构、外设模块和寄存器的功能,以及如何通过寄存器编程的方式对STM32进行控制和配置。
这些知识为我后续的学习和实践打下了坚实的基础。
其次,我通过阅读官方文档和参考书籍,学习了STM32的编程方法和技巧。
我掌握了如何使用Keil、STM32CubeMX等工具进行STM32的程序开发和调试,以及如何编写C语言程序来实现对STM32的控制和应用。
同时,我还学习了如何使用HAL库和标准外设库来简化STM32的编程过程,提高开发效率。
除此之外,我还通过实际的项目实践,不断地提升自己的STM32应用能力。
我参与了一些STM32相关的项目,包括LED灯控制、温湿度监测、电机驱动等。
通过这些项目的实践,我对STM32的应用场景和实际开发经验有了更深入的了解,也提高了自己的问题解决能力和实际操作技能。
总的来说,学习STM32是一个不断探索和提升的过程。
通过系统的学习和实践,我对STM32的工作原理和应用有了更深入的了解,也积累了一定的实际经验。
在未来,我将继续深入学习STM32的相关知识和技能,不断提升自己的能力,为更多的STM32应用项目做出贡献。
希望我的学习总结能够对其他学习STM32的同学有所帮助,共同进步。
can总线波形检测实验心得
can总线波形检测实验心得本次实验是关于CAN总线波形检测的,通过实验的学习,我不仅掌握了CAN总线波形检测的理论知识,更重要的是在实践中加深了对CAN总线应用的认识。
CAN总线是一种多主机、高速、可靠、实时性强的数据通信总线,在现代汽车、工业控制等领域得到广泛应用。
选用CAN总线有很多好处,即可减少线缆数量,降低维护成本,增加可靠性,提高数据传输速度,提高系统实时性。
在本次实验中,我学习了使用示波器和通信分析仪来分析CAN总线波形。
首先,我们需要在CAN总线上定义并发送数据帧,然后使用示波器捕捉CAN总线上的信号,并通过观察CAN总线上的波形,分析数据传输的情况。
在实践中,我观察到了如下几个重点:一、观察CAN总线上的波形,要重点分辨CAN总线上的SOH和SOL 分别对应CAN总线上的高电平和低电平,从而判断数据帧是否正确地发送到总线上。
二、分析CAN总线波形时,要注意每个CAN信号线上电位的变化,尤其是在出现错误时,要通过观察特定的错误标识码,分析错误原因,及时进行排查和修复。
例如,出现了错误的电压水平,说明CAN总线出现了故障。
三、当数据帧未能正确地发送到CAN总线上时,要通过示波器分析波形,及时发现问题,并进行排查。
例如,可以根据诊断数据或制造商的建议,查看是否存在不当安装或信号强度较弱等问题,以及检查是否存在总线长度过长、噪声污染、松动的连接以及总线终端等问题,并及时进行修复和调整。
综上所述,本次实验不仅仅是对我们掌握CAN总线波形检测知识的考验,更是对我们掌握CAN总线应用知识的指导。
我们需要在实践中不断总结和积累经验,不断提高自己的技能和水平,以便更好的应用CAN总线技术,为实际工程应用提供更好的支持。
stm32实训总结
实践形式: √校内实践基地实践□校外实践基地□导师联系校外实践□自行联系校外实践□ 其他______________起止日期:2015.12.14-2015.12.25实践总结(要求写明实践地点、实践时间、指导教师、实践目的、实践内容和完成情况,字数及其它具体要求由各学院根据学科情况自行制定。
)实践地点实践目的1. 利用所学过的基础知识,通过本次电子实习培养独立解决实际问题的能力。
2. 巩固本课程所学习的理论知识和实验技能。
3. 了解循迹小车构成的设计方法。
4. 掌握常用电子电路的一般设计方法,提高设计能力和实验、动手能力,为今后从事电子电路的设计、研制电子产品打下基础。
5. 培养团队的协作和沟通能力。
实践内容:一、智能小车配置本次实训中所用到的智能小车如图1所示,其主要配置包括:图1 智能小车1、小车底盘小车底盘是机器人最重要的载体,相当于人体的驱干,ZK-4WD小车平台采用差速转弯非常灵活可以实现原地打转。
小车平台大小刚好可以承载一些如驱动器控制器、控制器、电池、传感器等。
图2 小车底盘2、驱动器小车直流电机工作电流一般是200-400MA,有些更大,如果一个小车是二个轮子,那么总的电流在400-800MA左右,这些电机轮子都是要接受单片机指令执行相应的动作,而市面有的单片机IO 口一般只能提供5MA到10MA的电流,直接驱动不了电机,所以需要一个驱动模块,放大电流。
驱动采用专业的L298N驱动芯片。
图3 L298N驱动芯片3、控制器图4为控制器STM32核心板,STM32平台采用核心板+外围板方式。
核心板主要包括STM32F103VET6最小系统、按键、LED灯、TF卡、串口和JTAG电路。
可以完成STM32内部资源的大部分开发应用。
外围板包括数码管电路、存储器电路、红外、光敏电阻、温度传感器、ULN2003电路、步进电机、蜂鸣器、DS1302时钟电路和CAN总线等电路设计,基本包括了STM32的所有资源、同时又对IIC、单总线、SPI 总线、CAN总线等协议进行了硬件设计。
stm32心得体会
stm32心得体会作为一名工程师,我有幸接触到了STM32微控制器,这是一款功能强大且广泛应用的微控制器。
在使用STM32过程中,我获得了许多宝贵的经验和体会。
首先,STM32的灵活性给开发者带来了巨大的便利。
不同于其他微控制器,STM32具有丰富的外设和引脚资源。
无论是控制器与其他外部设备的通信,还是为外部设备提供驱动,STM32都能够满足需求。
开发者可以根据具体应用的需求,选择适合的外设和引脚配置,实现各种功能。
这种灵活性使得STM32在不同领域的应用中都能够发挥重要作用。
其次,STM32的强大性能为开发者提供了良好的开发环境。
STM32的处理器核心采用了ARM Cortex-M系列,具有高性能和低功耗的特点。
这使得开发者能够编写高效的代码,在保证系统正常运行的同时,尽量减少对处理器资源的占用。
此外,STM32还配备了丰富的存储器,开发者可以根据需要选择适当的存储器类型,保证代码和数据的高效运行。
最重要的是,STM32具有强大的软件生态系统。
STMicroelectronics提供了丰富的开发工具和软件库,包括STM32CubeIDE、STM32Cube软件包等。
这些工具和软件库不仅提供了开发环境和调试功能,还提供了丰富的示例代码和驱动程序,帮助开发者快速实现功能。
此外,STM32社区也是一个宝贵的资源,开发者可以在社区中交流经验、解决问题,共同进步。
在使用STM32的过程中,我还注意到了一些需要注意的问题。
首先,由于STM32具有强大的功能和丰富的外设,开发者需要仔细阅读相关文档,并了解各个外设的使用方法和限制条件。
这样才能充分发挥STM32的强大功能,并避免在应用中出现问题。
另外,由于STM32的引脚资源有限,开发者需要合理规划引脚的使用,以确保各个外设之间的互不干扰。
总之,STM32是一款功能强大且灵活易用的微控制器。
它提供了丰富的外设和引脚资源,具有强大的性能和良好的开发环境。
在使用STM32的过程中,我们需要充分发挥其优势,合理规划外设和引脚的使用,同时借助STMicroelectronics提供的开发工具和软件库,使得开发工作更加高效和便捷。
学习stm32工作总结
学习stm32工作总结学习STM32工作总结。
作为一名嵌入式系统工程师,学习STM32是必不可少的一项技能。
在过去的一段时间里,我花了大量的时间和精力来学习STM32,并在实际项目中应用了这些知识。
在这篇文章中,我将总结我学习STM32的经验和心得,希望对其他初学者有所帮助。
首先,学习STM32需要对嵌入式系统有一定的了解。
了解嵌入式系统的基本原理和结构对于学习STM32是非常重要的。
此外,对于C语言的基础知识也是必不可少的,因为在STM32的开发过程中,大部分的代码都是用C语言来编写的。
其次,学习STM32需要有一定的电子电路知识。
因为STM32是一款微控制器,它需要和外部的电路进行连接才能发挥其功能。
因此,了解一些基本的电路知识对于学习STM32是非常有帮助的。
在学习STM32的过程中,我发现了一些学习的方法和技巧。
首先,我建议初学者可以通过阅读官方的文档和手册来了解STM32的基本知识和功能。
其次,可以通过一些开源项目来学习STM32的应用,这样可以更快地掌握STM32的开发技巧和方法。
另外,可以通过一些在线的教程和视频来学习STM32的开发,这样可以更直观地了解STM32的使用方法。
在实际项目中应用STM32的过程中,我也遇到了一些问题和挑战。
例如,在连接外部设备时需要考虑到时序和电气特性,这需要对外部设备有一定的了解。
另外,在调试和优化代码的过程中也需要一定的耐心和技巧。
总的来说,学习STM32是一项非常有挑战性的任务,但是通过不断的学习和实践,我相信每个人都可以掌握STM32的开发技能。
希望我的经验和总结可以对其他初学者有所帮助,也希望大家可以在学习STM32的过程中不断进步和成长。
(stm32f103学习总结)—can总线
(stm32f103学习总结)—can总线参考: 1 CAN总线介绍 CAN 是Controller Area Network 的缩写,中⽂意思是控制器局域⽹ 络,是ISO国际标准化的串⾏通信协议。
它是德国电⽓商博世公司于1986 年⾯向汽车⽽开发的CAN 通信协议。
此后,CAN 通过ISO11898 及 ISO11519 进⾏了标准化。
CAN是国际上应⽤最⼴泛的现场总线之⼀,在 欧洲已是汽车⽹络的标准协议。
CAN 的⾼性能和可靠性已被认同,并被 ⼴泛地应⽤于⼯业⾃动化、船舶、医疗设备、⼯业设备等⽅⾯。
CAN通信只具有两根信号线,分别是CAN_H和CAN_L,CAN 控制器根据 这两根线上的电位差来判断总线电平。
总线电平分为显性电平和隐性电 平,⼆者必居其⼀。
发送⽅通过使总线电平发⽣变化,将消息发送给接 收⽅。
2 CAN物理层 与I2C、SPI等具有时钟信号的同步通讯⽅式不同,CAN通讯并不是以时钟信号来进⾏同步的,它是⼀种异步通讯,只具有CAN_High和CAN_Low两条信号线,共同构成⼀组差分信号线,以差分信号的形式进⾏通讯。
CAN物理层的形式主要分为闭环总线及开环总线⽹络两种,⼀个适合于⾼速通讯,⼀个适合于远距离通讯。
2.1 闭环can总线⽹络CAN闭环通讯⽹络是⼀种遵循ISO11898标准的⾼速、短距离⽹络,它的总线最⼤长度为40m,通信速度最⾼为1Mbps,总线的两端各要求有⼀个“120欧”的电阻2.2 开环can总线⽹络CAN开环总线⽹络是遵循ISO11519-2标准的低速、远距离⽹络,它的最⼤传输距离为1km,最⾼通讯速率为125kbps,两根总线是独⽴的、不形成闭环,要求每根总线上各串联有⼀个“2.2千欧”的电阻2.3通讯节点 CAN总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。
由于CAN通讯协议不对节点进⾏地址编码,⽽是对数据内容进⾏编码,所以⽹络中的节点个数理论上不受限制,只要总线的负载⾜够即可,可以通过中继器增强负载。
stm32心得体会
stm32心得体会我使用STM32微控制器进行项目开发的经验已经超过一年了。
我通过这段时间的使用和学习,对STM32的性能和特点有了更深入的理解。
下面是我使用STM32的心得体会。
首先,STM32具有强大的处理能力。
它采用了Cortex-M系列的ARM内核,具有高速的时钟频率和丰富的内存空间,使得它能够处理复杂的任务和多个外设的同时操作。
我在实际的开发中,使用STM32处理各种传感器数据、驱动各种执行器等,都能够得到良好的性能。
同时,STM32还支持多核、多任务的处理方式,进一步提高了系统的处理能力。
其次,STM32具有丰富的外设资源。
它具有多个GPIO口、定时器、串口通信接口、I2C、SPI等多种外设,能够满足各种应用的需求。
我在实际的项目中,经常需要使用到串口通信、定时器和GPIO口等,STM32提供了非常简洁方便的API,使得开发工作变得更加简单高效。
同时,STM32还支持中断机制和DMA传输,大大提高了系统的响应速度和数据传输效率。
此外,STM32还具有丰富的开发工具和生态系统。
ST官方提供了STM32CubeMX软件,能够快速生成初始化代码和配置文件,大大提高了开发的效率。
同时,ST还提供了丰富的开发文档和示例代码,以及一系列的开发板和调试工具,方便开发者进行硬件测试和调试。
此外,STM32生态系统还有许多第三方库和开发工具,丰富了开发者的选择和功能。
最后,我认为使用STM32进行开发具有较高的学习门槛。
由于STM32架构较为复杂,对硬件和软件的理解要求较高。
同时,STM32的开发工具和文档也相对复杂,需要一定的学习成本。
对于初学者来说,建议先了解一些基本的电子和嵌入式系统知识,再进行STM32开发。
但是一旦熟悉了STM32的开发流程和API,就能够快速进行项目开发。
综上所述,STM32作为一款强大的微控制器,具有高性能、丰富的外设资源和完善的开发工具,非常适合用于嵌入式系统的开发。
我通过使用STM32进行项目开发,不仅提高了技术水平,也获得了一些实际的应用经验。
stm32实训心得体会
stm32实训心得体会篇一:STM32 实验2报告实验2MINI STM32按键控制LED灯实验一、实验目的1、掌握嵌入式程序设计流程。
2、熟悉STM32固件库的基本使用。
二、实验内容1、编程使用I/O口作为输入,控制板载的两个LED 灯。
2、使用固件库编程。
三、实验设备硬件: PC机一台MINI STM32开发板一套软件: RVMDK 一套Windows XP 一套四、实验步骤1、设计工程,使用固件库来编程设置。
、在这里我们建立一个文件夹为: STM32-Projects.点击Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹STM32-Projecst 之下,在这个目录下面建立子文件夹shiyan1, 然后定位到 shiyan1目录下面,我们的工程文件就都保存到shiyan1 文件夹下面。
工程命名为shiyan1, 点击保存.是这个型号。
、这里我们定位到STMicroelectronics 下面的STM32F103RB ,然后点击Add ,然后Close.、用同样的方法,将 Groups 定位到CORE 和USER 下面,添加需要的文件。
这里我们的CORE 下面需要添加的文件为core_ ,startup_stm32f10x_ ,USER 目录下面需要添加的文件为,stm32f10x_,system_ 这样我们需要添加的文件已经添加到我们的工程中去了,最后点击 OK,回到工程主界面、下面我们要告诉 MDK,在哪些路径之下搜索相应的文件。
回到工程主菜单,点击魔术棒,出来一个菜单,然后点击 c/c++ 选项. 然后点击 Include Paths 右边的按钮。
弹出一个添加path 的对话框,然后我们将图上面的 3 个目录添加进去。
记住,keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得path 一定要定位到最后一级子目录。
总线基本实验的实验心得
总线基本实验的实验心得
在实验总线基本实验中,我学到了许多关于计算机体系结构和计
算机网络的知识,还掌握了如何设计、实现和测试总线协议。
以下是
我的实验心得:
1. 了解计算机体系结构:总线是计算机内部通信的介质,是计算
机系统中最基本的结构之一。
在总线基本实验中,我了解了计算机系
统中各个部件的作用和相互之间的联系,包括中央处理器(CPU)、内存、输入输出设备等。
2. 掌握总线协议:总线协议是总线通信的基础,包括数据报、时序、地址空间等方面的规范。
在总线基本实验中,我学习了如何设计、实现和测试总线协议,如USB、I2C、SPI等。
3. 理解电路设计:在总线基本实验中,我学习了如何使用示波器、逻辑分析仪等工具进行电路设计。
通过设计电路,我理解了电路原理
和数字电路的基本操作,这对我今后的电路设计和实验有着重要的帮助。
4. 实践编写代码:在总线基本实验中,我学习了如何使用C语言
编写代码,并实现了一些简单的功能,如读取文件、发送数据等。
通过实践编写代码,我更深入地理解了C语言编程的基本技巧和计算机系
统的工作原理。
5. 掌握测试工具:在总线基本实验中,我学习了如何使用逻辑分
析仪、示波器等测试工具进行总线协议的测试。
通过测试工具,我能
够更准确地检查总线通信的正确性和性能,从而验证总线协议的正确
性和可靠性。
总线基本实验对我的学习和成长有着重要的帮助。
通过实验,我不仅掌握了计算机体系结构、总线协议和电路设计等基础知识,还能够编写和测试代码,提高编程能力和测试技能。
STM32的CAN现场总线应用经验总结
STM32的CAN现场总线应用经验总结CAN现场总线的应用最重要的就是其接口端口映射、初始化及数据的发送、接收。
1.接口映射STM32中的CAN物理引脚可以设置成三种:默认模式、重定义地址1模式、重定义地址2模式。
CAN信号可以被映射到端口A、端口B或端口D上,如下表所示,对于端口D,在36、48和64脚的封装上没有重映射功能。
表1:CAN复用功能重映射复用功能CAN_REMAP[1:0]="00"CAN_REMAP[1:0]="10"CAN_REMAP[1:0]="11" CAN_RX PA11PB8 PD0CAN_TX PA12 PB9 PD1重映射不适用于36脚的封装当PD0和PD1没有被重映射到OSC_IN和OSC_OUT时,重映射功能只适用于100脚和144脚的封装上---------------------------------------------------------------------------------------------------------------------- 默认模式/* Configure CAN pin: RX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/* Configure CAN pin: TX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);---------------------------------------------------------------------------------------------------------------------- 重定义地址1模式/* Configure CAN pin: RX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/* Configure CAN pin: TX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/*Configure CAN Remap 重映射*/GPIO_PinRemapConfig(GPIO_Remap1_CAN,ENABLE);---------------------------------------------------------------------------------------------------------------------- /* Configure CAN pin: RX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/* Configure CAN pin: TX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/*Configure CAN Remap 重映射 */GPIO_PinRemapConfig(GPIO_Remap2_CAN,ENABLE);---------------------------------------------------------------------------------------------------------------------- 设置完CAN 的引脚之后还需要打开CAN 的时钟: /* CAN Periph clock enable */RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN,ENABLE); 2. 初始化2.1.1 CAN 单元初始化CAN 单元初始化最重要的就是波特率的设置,原理如下:位时间同步段 时间段1(BS1)时间段2(BS2) 1×t q t BS1=(TS1[3:0]+1)×t qt BS2= (TS2[2:0]+1)×t q波特率=1/位时间位时间 = (1 + t BS1 + t BS2)× t q t q = (BRP[9:0] + 1)× t PCLKt PCLK = APB1例如现有一STM32系统时钟为72MHz ,关于CAN 波特率有以下设置: CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; //重新同步跳跃宽度1个时间单位 CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq; //时间段1为8个时间单位 CAN_InitStructure.CAN_BS2 = CAN_BS2_7tq; //时间段2为7个时间单位 CAN_InitStructure.CAN_Prescaler = 45; //设定了一个时间单位的长度为45即:CAN_InitStructure.CAN_Prescaler即:CAN_InitStructure.CAN_BS1即:CAN_InitStructure.CAN_BS则其CAN 的波特率为1÷[(1+8+7)×45÷(36×106)]=50KHzCAN 单元的初始化,除了波特率的设置以外还包括以下设置:CAN_InitTypeDef CAN_InitStructure; //定义一个CAN 单元CAN_InitStructure.CAN_TTCM = DISABLE; //设置时间触发通信模式(失能) CAN_InitStructure.CAN_ABOM = DISABLE;// 使/失能自动离线管理(失能) CAN_InitStructure.CAN_AWUM = DISABLE;// 使/失能自动唤醒模式(失能) CAN_InitStructure.CAN_NART = DISABLE; //使/失能非自动重传输模式(失能) CAN_InitStructure.CAN_RFLM = DISABLE;// 使/失能接收FIFO 锁定模式(失能) CAN_InitStructure.CAN_TXFP = DISABLE; //使/失能发送FIFO 优先级(失能)CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;//设置CAN 工作模式(正常模式) 2.1.2 CAN 报文过滤器初始化STM32共有14组过滤器,每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和CAN_FxR1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32的can总线实验心得(一) 工业现场总线 CAN 的基本介绍以及 STM32 的 CAN 模块简介首先通读手册中关于CAN的文档,必须精读。
STM32F10xxx 参考手册Rev7V3.pdf/bbs/redirect.php?tid=255&goto=lastpost#lastpos t需要精读的部分为 RCC 和 CAN 两个章节。
为什么需要精读 RCC 呢?因为我们将学习 CAN 的波特率的设置,将要使用到RCC 部分的设置,因此推荐大家先复习下这部分中的几个时钟。
关于 STM32 的 can 总线简单介绍bxCAN 是基本扩展 CAN (Basic Extended CAN) 的缩写,它支持 CAN 协议 2.0A 和 2.0B 。
它的设计目标是,以最小的 CPU 负荷来高效处理大量收到的报文。
它也支持报文发送的优先级要求(优先级特性可软件配置)。
对于安全紧要的应用,bxCAN 提供所有支持时间触发通信模式所需的硬件功能。
主要特点· 支持 CAN 协议 2.0A 和 2.0B 主动模式· 波特率最高可达 1 兆位 / 秒· 支持时间触发通信功能发送· 3 个发送邮箱· 发送报文的优先级特性可软件配置· 记录发送 SOF 时刻的时间戳接收· 3 级深度的2个接收 FIFO· 14 个位宽可变的过滤器组-由整个 CAN 共享· 标识符列表· FIFO 溢出处理方式可配置· 记录接收 SOF 时刻的时间戳可支持时间触发通信模式· 禁止自动重传模式· 16 位自由运行定时器· 定时器分辨率可配置· 可在最后 2 个数据字节发送时间戳管理· 中断可屏蔽· 邮箱占用单独 1 块地址空间,便于提高软件效率(二) STM32 CAN 模块工作模式STM32 的 can 的工作模式分为:/* CAN operating mode */#define CAN_Mode_Normal ((u8)0x00) /* normal mode */#define CAN_Mode_LoopBack ((u8)0x01) /* loopback mode */#define CAN_Mode_Silent ((u8)0x02) /* silent mode */#define CAN_Mode_Silent_LoopBack ((u8)0x03) /* loopback combined with silent mode */在此章我们的 Mini-STM32 教程中我们将使用到CAN_Mode_LoopBack和CAN_Mode_Normal两种模式。
我们第一步做的就是使用运行在 CAN_Mode_LoopBack 下进行自测试。
在参考手册中 CAN_Mode_LoopBack (环回模式) 的定义如下:环回模式可用于自测试。
为了避免外部的影响,在环回模式下 CAN 内核忽略确认错误 (在数据 / 远程帧的确认位时刻,不检测是否有显性位) 。
在环回模式下,bxCAN 在内部把 Tx 输出回馈到 Rx 输入上,而完全忽略 CANRX 引脚的实际状态。
发送的报文可以在 CANTX 引脚上检测到。
因此这种模式也特别适合大家做好硬件后自测程序。
下载(37.38 KB)2009-8-16 11:46(三) CAN 接口端口映射STM32 中的 CAN 物理引脚脚位可以设置成三种:默认模式,重定义地址1模式,重定义地址2模式。
下载(28.94 KB)2009-8-16 11:51在我们的 Mini-STM32 上面没有接出 CAN 的接口芯片, 所以我们可以利用RealView MDK的 CAN 软件模拟模块来做实验.-------------------------------------------------------------------------默认模式/* Configure CAN pin: RX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure CAN pin: TX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);------------------------------------------------------------------------重定义地址1模式/* Configure CAN pin: RX *///GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Init(GPIOB, &GPIO_InitStructure);/* Configure CAN pin: TX *///GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//GPIO_Init(GPIOB, &GPIO_InitStructure);/* Configure CAN Remap 重影射 *///GPIO_PinRemapConfig(GPIO_Remap1_CAN, ENABLE);-------------------------------------------------------------------------重定义地址2模式/* Configure CAN pin: RX *///GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Init(GPIOD, &GPIO_InitStructure);/* Configure CAN pin: TX *///GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//GPIO_Init(GPIOD, &GPIO_InitStructure);/* Configure CAN Remap 重影射 *///GPIO_PinRemapConfig(GPIO_Remap2_CAN, ENABLE);-------------------------------------------------------------------------设置完 CAN 的引脚之后还需要打开 CAN 的时钟:/* CAN Periph clock enable */RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);(四) CAN 波特率设置4、我们需要搞明白CAN波特率的设置,这个章节也是使用CAN的最重要的部分之一,因为这实际应用中我们需要根据我们实际的场合来选择 CAN 的波特率。
一般情况下面1M bps 的速率下可以最高可靠传输 40 米以内的距离。
在 50K 以下的波特率中一般可以可靠传输数公里远。
对于波特率的设置需要详细学习参考手册对应部分的解释。
我们在调试软件的时候可以使用示波器来测试 CANTX 引脚上的波形的波特率,这样可以得到事半功倍的效果,大大的缩短调试学习的时间。
// ***************************************************************// BaudRate = 1 / NominalBitTime// NominalBitTime = 1tq + tBS1 + tBS2// tq = (BRP[9:0] + 1) x tPCLK// tPCLK = CAN's clock = APB1's clock// ****************************************************************也就是BaudRate = APB1 / ((BS1 + BS2 + 1) * Prescaler)这里注意的是采用点的位置,也就时BS1,BS2的设置问题,这里我也找了一些资料,抄录下来给大家,是 CANopen 协议中推荐的设置。
1Mbps 速率下,采用点的位置在6tq位置处,BS1=5, BS2=2500kbps 速率下,采用点的位置在8tq位置处,BS1=7, BS2=3250kbps 速率下,采用点的位置在14tq位置处,BS1=13, BS2=2125k, 100k, 50k, 20k, 10k 的采用点位置与 250K 相同。
因此我们需要重视的有软件中的这么几个部分:// 设置 AHB 时钟(HCLK)// RCC_SYSCLK_Div1 AHB 时钟 = 系统时钟RCC_HCLKConfig(RCC_SYSCLK_Div8);// 设置低速 AHB 时钟(PCLK1)// RCC_HCLK_Div2 APB1 时钟 = HCLK / 2RCC_PCLK1Config(RCC_HCLK_Div2);// PLLCLK = 8MHz * 8 = 64 MHz// 设置 PLL 时钟源及倍频系数RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_8);CAN 波特率设置中需要的就是PCLK1 的时钟。