tag 标签: CUBEMX

相关博文
  • 热度 2
    2024-1-11 17:24
    305 次阅读|
    0 个评论
    stm32 CubeMx 实现SD卡/sd nand FATFS读写测试。   材料:stm32F407ZGT6开发板、雷龙公司的SD_NAND 测试板(CSNP1GCR01-AOW)。(一开始是使用 Nandflash的操作起来不太方便而且 stm32cubemx自带的 fatfs还没有磨损平衡算法,很是难受。)   CSNP1GCR01-AOW的优势:   不用写驱动程序自带坏块管理的NAND Flash(贴片式TF卡),尺寸小巧,简单易用,兼容性强,稳定可靠,固件可定制,LGA-8封装,标准SDIO接口,兼容SPI/SD接口,兼容各大MCU平台,可替代普通TF卡/SD卡,尺寸6x8mm毫米,内置SLC晶圆擦写寿命10万次,通过1万次随机掉电测试耐高低温,支持工业级温度-40°~+85°,机贴手贴都非常方便,速度级别Class10(读取速度23.5MB/S写入速度12.3MB/S)标准的SD 2.0协议使得用户可以直接移植标准驱动代码,省去了驱动代码编程环节。支持TF卡启动的SOC都可以用SD NAND,提供STM32参考例程及原厂技术支持,主流容量:128MB/512MB/4GB/8GB,比TF卡稳定,比eMMC便宜,样品免费试用(可到官网找客服小姐姐领取样品哦)。雷龙官网   话不多说开始正文:   stm32cubeMX 版本:6.6.1   MDK5 版本5.35   开始配置STM32   1、 配置时钟:   系统时钟树配置(我这里直接拉满,实际使用根据功耗要求作相应的调整)   2、 配置调试接口   注意DEBUG这个一定要配置,如果是默认的那下载一次程序之后第二次就下载不进去了.   3、配置SDIO:   (我这里还是用了DMA 减少mcu的资源开销)   配置完成之后随便选一个IO口作为SD_NAND的插入检测引脚(没有检测脚的也选上不然在生成代码的时候会有警告,看着很不舒服,我这里选的是 PE4 引脚)   4、配置SDIO的DMA   5、添加文件系统  6、配置堆栈大小(稍微调大一点,不然在读写大一点的数据的时候可能会出错)   7、生成代码   8、生成代码后在 bsp_driver_sd.c这个文件中将这三行代码注释(这是检测SD卡是否接入的引脚 如果不注释在挂载sdnand的时候会提示 not_ready)   9、在main.c中 添加测试代码 */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "dma.h" #include "fatfs.h" #include "sdio.h" #include "gpio.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ FATFS fs; /* FatFs 文件系统对象 */ FIL file; /* 文件对象 */ FRESULT f_res; /* 文件操作结果 */ UINT fnum; /* 文件成功读写数量 */ BYTE ReadBuffer = {0}; /* 读缓冲区 */ BYTE WriteBuffer */ void* work, /* Pointer to working buffer */ UINT len /* Size of working buffer */ )  f_mkfs 这个函数有五个参数,老版本的只有三个参数   所以在格式化的时候得这么来操作 f_res = f_mkfs("0:/",FM_FAT|FM_SFD,0,&ReadBuffer,sizeof(ReadBuffer));
  • 热度 18
    2021-7-9 15:21
    1985 次阅读|
    0 个评论
    FreeModbus从站设计(11)-把Modbus的通信参数存在单片机的flash中 关键词:FreeModbus CubeMX HAL库 flash 通信参数 作为从站,Modbus-RTU通信的参数主要包括从站地址和串口参数,串口参数又包括波特率、校验位、停止位等,把这些参数存储在单片机的flash里,孔丙火(微信公众号:孔丙火)认为,可以简化电路设计,应用更加灵活。通用串口参数中数据位,在Modbus-RTU通信中是不需要设置的,因为Modbus协议规范规定,Modbus-RTU的数据位必须为8位。 1. 通信参数在 flash 中的存储位置 STM32F103C8T6的flash存储区是没有区分程序区和用户数据区的,将通信参数存在flash中,最大的一个原则是不能影响程序代码存储区,否则会有意想不到的后果。具体存在flash中的哪个位置,要根据实际情况来,一般来说,程序代码都不会把flash占满,一般存在最后一页。以此系列文章的示例程序为例,通过keil的编译信息,可以看到程序占用的flash空间只有十几kB,如图1所示,而STM32F103C8T6的flash空间是64kB,共64页,因此擦除、写数据到最后一页不会影响程序代码。 图1 STM32F103C8T6属于中等容量的STM32F103,其flash组织结构如图2所示。中等容量的STM32F103有64kB和128kB两种,STM32F103C8T6是64kB的,因此,只有64页。Flash的操作必须要先擦除,再写入,并且是按页擦除的。最后一页的地址为:0x0800FC00。 图2 2. 基于 HAL 库写 flash 的方法 图3 如图3所示,孔丙火(微信公众号:孔丙火)在modbus_app.c文件中写了一个写flash的函数。总体流程就是先擦除再写入,直接调用HAL库函数就可以了。 3. 通信参数修改的基本流程 基本流程:从站收到修改通信参数的命令→将参数存储到中间数组→写flash→重新初始化串口和协议栈参数。 这里的示例程序,采用写多个保持寄存器(16功能码)传输修改通信参数命令,设定为:从地址15(协议地址格式)开始,写5个寄存器,首个寄存器写入的输入必须为0xFFAA,后面四个寄存器分别表示:从站地址、波特率、校验位、停止位,程序代码如图4所示。 图4 这段代码写在eMBRegHoldingCB()函数中,这个函数在之前的章节有阐述。收到的通信参数存储在了usUsrComFlashData[]中,这是一个全局变量。并且将ucUsrComconfig置1,用于在函数外部写flash的标识。 图5 如图5所示,调用vUsrWriteFlash()函数写flash,此段代码写在主循环while(1)中。 重新初始化串口和协议栈参数,有两种方法,一种是在修改通信参数后,让用户重启,程序在main()函数的初始化阶段完成串口和协议栈参数的初始化,还有一种是在收到修改通信参数的命令后,在线重新初始化串口和协议栈。孔丙火(微信公众号:孔丙火)认为,在工业控制领域,前一种方法更好,因为工控领域最重要的是安全,如果从站正在接收控制命令,这时对串口和协议栈重新初始化,是有危险的,而且修改通信参数的事件,并非高频率。 总结 :介绍了STM32F103C8T6的flash的组织结构,进一步分析了通信参数在flash中的存储位置,阐述了基于HAL库写flash的方法和通信参数修改的基本流程。代码经过实践,可以实现将通信参数存在flash中,并可以通过Modbus命令修改通信参数。 文章在公众号( 孔丙火 )同步推出,欢迎查看更多系列文章。 单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,以实际项目为单元阐述知识点,一起分享,共同交流。
  • 热度 30
    2020-11-9 13:04
    2539 次阅读|
    0 个评论
    关键词:Modbus FreeModbus STM32F103C8T6 CubeMX 1.开发环境 (1)STM32CubeMX,版本:4.27.0,截止写稿时,最新版本已到6,但孔丙火(微信公众号:孔丙火)实在是用不习惯版本5以后的界面,所以还继续用4版本的。 图1 (2)MDK(Keil),版本:5.17,有部分朋友用的还是4版本的,建议升级到5,在5下装一个兼容包,就可以用5打开4版本的程序。 2.时钟及串口初始化 (1)新建CubeMX工程 孔丙火(微信公众号:孔丙火)认为,这一步比较简单,点击初始界面中的New Project,在后面出现的配置窗口中,按照图2搜索STM32F103C8,选择这个器件,然后点击Start Project就可以了。 图2 然后就到了图3的配置界面,红框部分跟图中配置一样即可。左侧红框选择后,右边红框的部分会自动出来。TIM2用来做RTU的3.5字符周期的定时,下一节孔丙火(微信公众号:孔丙火)会详细讲解。 图3 单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,一起分享,共同交流。
  • 热度 22
    2020-11-7 09:15
    2959 次阅读|
    0 个评论
    关键词:Modbus FreeModbus STM32F103C8T6 CubeMX 只有串口通信的话,硬件设计相对简单,孔丙火(微信公众号:孔丙火)认为,大体可以分为3个部分:单片机、电源部分和485部分,分别如图1、图2和图3所示。 图1 图2 图3 单片机采用STM32F103C8T6,从孔丙火(微信公众号:孔丙火)的认知来看,这款单片机是当前比较常用的型号之一。UART1用过ISP下载和串口打印,UART2用于RS485通信,整块板子采用DC5V供电,通过AMIS1117转换成3.3V给单片机供电,RS485采用隔离设计,隔离电源采用IB0505S-W75R3,隔离电压是1500VDC,485信号转换及隔离采用ADM2483BRWZ。在单片机部分加一个外部看门狗SP706SEN,同时具备供电电源监控功能,单片机供电电源低于2.93V时会复位单片机。单片机留有SWD接口,用于程序调试。由于IB0505S-W75R3的负载范围是10%-100%,为了保证电源的稳定,孔丙火(微信公众号:孔丙火)在输出端加了一个R8的死负载。ADM2483BRWZ内部采用磁隔离设计,虽然成本高一些,但电路设计简单,也可以节省PCB面积。 单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,一起分享,共同交流。
  • 热度 25
    2020-10-17 18:41
    1981 次阅读|
    0 个评论
    STM32F103C8T6、FreeModbus从站的设计与测试(1)——引言 关键词:Modbus FreeModbus STM32F103C8T6 CubeMX 在国内的工业控制系统和传感器中,Modbus总线是很常见的,主要原因是其硬件设计简单、通信流程简洁、易于软件实现,Modbus总线最初是由德国的Modicon(莫迪康)公司的提出的,已有几十年的历史,现已成为国际标准。 孔丙火(微信公众号:孔丙火)认为,如果我们仅仅是使用Modbus总线,比如使用带有Modbus通信接口的PLC,则只需要关注Modbus的通信格式即可,如从站地址、功能码、通信超时参数等,而如果我们开发一块带有Modbus接口的控制板或者传感器,则需要关注Modbus通信协议的内部实现方法。 Modbus总线的物理层实现有两种:工业以太网和串口,工业以太网使用的Modbus-TCP协议,串口使用Modbus-RTU和Modbus-ASCII协议。串口是最常用的一种通信方式,那孔丙火(微信公众号:孔丙火)就来说它。 单片机上都有通用异步收发串口(UART),一个或多个,在硬件上,只需要加一个RS485或RS232的电平转换,即可实现工业串口通信。因此,只要我们在UART收发准确的基础上,按照Modbus标准编写通信协议,即可实现单片机的Modbus通信,想想是不难的,但工业通信不仅要实现功能,还要确保稳定,自己编写源码去实现一个通信协议,并不是一个最优方案,性价比不高,还有一种方法,是采用成熟的协议栈实现,成熟的协议栈有专门的组织维护,大量的使用,也更容易发现bug。当然,孔丙火(微信公众号:孔丙火)认为,对于程序猿或攻城狮来说,有免费的成熟的协议栈就更完美了,而FreeModbus协议栈就满足这个要求,然而美中不足,它只支持从站协议,主站协议是要收费的,不过已经很好了,知足常乐。 那么,孔丙火(微信公众号:孔丙火)的主题来了,用FreeModbus协议栈实现一个基于串口通信的Modbus从站,采用什么单片机呢,这个可以随便选,只要有一个UART接口就可以,那就选一个常用的,意法半导体的STM32F103C8T6,Cortex-M3的内核,片上资源对于Modbus协议来说也足够。孔丙火(微信公众号:孔丙火)在网上也查看了一些STM32F103移植FreeModbus的资料,总感觉不清晰,看起来有点费劲,可能是我的水平太差吧,所以在一次开发Modbus从站的过程中,想着整理一下开发心得,目的是对正在开发Modbus的朋友有一些帮助,少走一些弯路,另外,网上缺乏一些对Modbus协议测试的文章,我也把相关的心得写出来,包括各种功能码的测试、错误码的测试等。 意法半导体的单片机,在开发时可以使用CubeMX,生成初始化代码,可以为新手朋友节省不少开发时间,孔丙火(微信公众号:孔丙火)认为,这是意法半导体的一个优势,当然,ST的单片机使用量很大,且网上的资料多,易于学习。 单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,一起分享,共同交流。 关注公众号,欣赏更多精彩文章。
相关资源