历史上的今天
返回首页

历史上的今天

今天是:2024年12月26日(星期四)

正在发生

2018年12月26日 | 关于stm32f407 串口程序编写过程 总结

2018-12-26 来源:eefocus

一.背景介绍


        17/07毕业,通过完成试用期的几个小项目,感觉自己能独立的完成部分项目,便接手了配合硬件工程师,将公司模块升级的任务(M3-->M4)


        目标:


        1.bootloader更改


        2.将rt_thread 系统移植到 stm32f407板子上


        3.将485,can , gsm ,以太网 驱动接口补上


        4.重新设计程序收发流程,完成实时收发数据


    (数据字典,wwdg  , 校验设计,对上,对下的协议修改等等 ,这些已在之前完成,只要调用响应接口,调试下即可)






二.目标实现


目标1.bootloader更改


          通过学习之前模块的代码,对整个bootloader流程有了大致的了解,学习flash的机构跟读写方法等


          1.更改对应的flash 信息,根据选择的芯片,通过编程手册或跟硬件工程师交流


            更改: 


            #define PAGE_SIZE   (0x800) /* 2 Kbytes */


            #define FLASH_SIZE   (0x100000) /* 1 MByte */


            #define USER_FLASH_END_ADDRESS        0x08100000  //1MB


            #define APPLICATION_ADDRESS   (uint32_t)0x08004000 //16KB     app 启动地址


           2.更新代码,将沉余代码删除,在keil5中一步步运行,删除多余代码,大体代码不做更改


              因为有打印信息需求,所以设置了485,在此之前先要理清概念:串行,并行,单工,半双工,全双工,同步/异步通信


       在此处不做介绍,大家百度下即可。


             usart:        1.对应时钟配置

                              2.有复用,就添加复用映射

                              3.管脚配置—管脚初始化

                              4.串口配置----串口初始化

                              5.配置中断


                              6.库函数包含中断跟发送     




           代码中有用到f_open 等,那必须得实现文件系统功能,通过SPI来实现,那就必须了解SPI的设置,功能等 


            SPI:串行外设总线,使MCU与各种外围设备以串行方式进行通信以交换信息。

            (1)MOSI

            (2)MISO

            (3)SCLK 


            (4)CS


            SPI:管脚配置

            1.配置使能管脚

            2.配置剩余三个管脚

            3.添加复用映射

            4. SPI口初始化

            5.使能SPI外设,启动传输  


            6. 库函数包含中断跟发送-------规则如nand flash  注意片选的使能


            其他改动不大,在 IAP_BOOT()函数中实现程序的跳转,进入app


            通过自测,将一个点灯的bin 文件放到对应的地址,boot函数会跳转到该地址,实现灯闪烁即OK


目标2:将rt_thread 系统移植到 stm32f407板子上


      知识储备:结合rt_thread编程手册,对rt_thread系统运行过程有个大致了解


      这个比较简单,在RT_Thread 官网上下载对应板子的bsp即可,编译keil,将未实现的函数库copy过来即可


     存在问题,你要注意bootloader的跳转地址,以及keil 里面配置的地址,还有app 程序里面的设置地址要对应起来 (如果地址不对应,可能会跑飞,之前遇到这个问题)


此处,先不用btloader跳转


通过编译之后,运行程序,检测到程序在idle里跑就行了,说明系统挂起来了



此处,先目标3.将485,can , gsm ,以太网 驱动接口补上


        需要学习相关串口的知识


(1)485


           485的设置不难,之前介绍过,在系统里面找到或添加对应的串口设置,实现对应的中断即可


            在rt_thread中要将finsh 跟 485关联起来,<




(2)can 


        学习can 的相关收发知识,以及相关程序的运行。


        can的配置不难


        Can配置:

        1.对应时钟配置

        2.有复用,就添加复用映射

        3.管脚配置—管脚初始化

        4.CAN单元配置

        5.过滤器配置

        6.优先级配置

        7.库函数包含中断跟发送


        主要问题:两个板子的对应的晶振不一致,这个需要在过滤器中配置,但是我将can过滤器设置之后还是出现收发错误


就开始找原因了,最后在函数 static rt_err_t bxcan_set_privmode(CAN_TypeDef *pcan, rt_uint32_t mode)中发现


    pcan->BTR = (mode                         | \

                 ((BAUD_DATA(SJW, baud_index)) << 24) | \

                 ((BAUD_DATA(BS1, baud_index)) << 16) | \

                 ((BAUD_DATA(BS2, baud_index)) << 20) | \


                 (BAUD_DATA(RRESCL, baud_index)) - 1);


知道对应的BAUD_DATA实现,更改了对应的过滤器设置,调试通过


// {1000UL * 500, MK_BKCAN_BAUD(CAN_SJW_2tq, CAN_BS1_9tq,  CAN_BS2_2tq, 6)},//36M


{1000UL * 500, MK_BKCAN_BAUD(CAN_SJW_1tq, CAN_BS1_7tq,  CAN_BS2_6tq, 6)},//42M


(3)SPI+DMA


        学习SPI跟DMA


       需要挂载文件系统,就需要用到SPI了,我看原来的代码通过SPI+DMA来实现,我将原先的库函数更换成M4的,将其配置改成M4的配置,发现实现不了。


原因:  两块芯片的flash不一样,此处只要将对应的初始化函数更改下,配上对应的flash,文件系统即可加载成功



(4)以太网


注意管脚配置即可


stm32f407 以太网驱动移植 在:

RT-Thread编程指南 -----   lwIP - 轻型TCP/IP协议栈  这一章写的很详细了,有需要的小伙伴可以去看下

RT-Thread中将lwIP应用起来主要包括三个核心步骤:

1. 创建收发包线程,调用接口eth_system_device_init()。

2. 提供网卡驱动,调用网卡初始化函数,注册网卡设备。(驱动不同相应的接口函数可能不同)


3. 初始化lwIP,创建lwIP线程,调用接口  lwip_sys_init()(实际调用的lwip_system_init())。


之后,在主线程上写了个tcpserver(编程手册里有代码) ,用QT写了client 实现了数据的收发,并完成测试


至此完成485,can,gsm,以太网的接口实现,之后就等新板子来了把管脚一调就可以测试了


小技巧:通过Xmind 将程序通过思维导图的方式写在上面,方便程序的添加更改,查找更便利

推荐阅读

史海拾趣

Elprotronic Inc.公司的发展小趣事

随着电子行业的不断发展,客户对电子元器件的需求也在不断变化。Elprotronic Inc.紧跟市场趋势,不断推出具有创新性的产品和技术。其中,一项名为“高速数据传输技术”的创新成果引起了业界的广泛关注。这项技术可以大幅提高数据传输速度,同时保证数据的稳定性和安全性。这一突破性的技术创新为Elprotronic Inc.赢得了更多客户的信赖和支持,也进一步巩固了公司在行业中的地位。

Digitron公司的发展小趣事

随着数字化和智能化时代的到来,Digitron公司也积极拥抱变革。公司投入大量资源用于数字化转型和智能化升级,通过引入先进的生产管理系统和人工智能技术提高生产效率和产品质量。同时,Digitron公司还积极探索物联网、大数据等新技术在电子行业的应用,为客户提供更加智能、便捷的解决方案。这些努力使Digitron公司在激烈的市场竞争中保持领先地位并实现了可持续发展。

璟德(ACX)公司的发展小趣事

随着技术的不断进步,璟德(ACX)的产品线也逐渐拓展,涵盖了滤波器、双工器、三工器、天线及其模组、蓝牙模组、射频前端模组等一系列高频陶瓷元件及模组。这些产品广泛应用于手机、无线网络、蓝牙、GPS、物联网等移动终端设备中,得到了市场的广泛认可。公司的业绩逐年攀升,客户群体也不断扩大。

睿赫(crechip)公司的发展小趣事

尽管睿赫公司在电子行业中取得了显著的成就,但公司也面临着诸多挑战。随着技术的不断进步和市场的不断变化,公司需要不断创新和进步,才能保持领先地位。

面对未来,睿赫公司将继续秉承“创新、卓越、诚信、共赢”的企业精神,不断加强技术研发和人才培养,推动公司的持续发展和壮大。同时,公司还将积极关注市场动态和客户需求,不断推出符合市场需求的新产品,为客户提供更加优质的服务和解决方案。

Corsair Memory Inc公司的发展小趣事

随着公司的发展,Corsair Memory Inc不仅局限于内存产品的生产,还积极扩大业务范围。其中,收购SCUF Gaming是Corsair在扩展业务版图上的重要一步。这一收购使Corsair得以进入游戏外设市场,进一步丰富了其产品线,也为其带来了更多的增长机会。

CYANLITE公司的发展小趣事

在XXXX年,CYANLITE公司迎来了一次重要的技术突破。他们成功研发出了一种新型的LED芯片,这种芯片具有更高的发光效率和更长的使用寿命。这一技术的突破使得CYANLITE公司的产品在市场上更具竞争力,公司也借此机会进一步扩大了市场份额。随着品牌知名度的提升,CYANLITE公司开始拓展国际市场,其产品逐渐出口到欧洲、北美等地区,公司的业绩也实现了快速增长。

问答坊 | AI 解惑

用Nokia 3310 液晶自制温度计

想像一下,如果有这么一个“裸体”温度计,就放在自己家里的书柜上,等朋友来了,一定会吸引不少眼光,你也可以借机炫耀一番。 不过放在家里的话,有可能曝光率不够高,那我们就随身携带好了,就像劳力士一样,经常“不经意”的掏出来看看:P ...…

查看全部问答>

大家一起晒晒示波器的美图吧~~~~

做个东西,就要做的精美,没有外表怎么成? 咱们可以晒晒示波器的美图,供坛子里做示波器的筒子们学学。 先抛个砖: …

查看全部问答>

STC12c5a单片机外扩flash,使用XBYTE读取flash的数据

我最近遇到一个问题,请教各位高手。 STC12c5a单片机,外扩flash,p0口复用为低8位地址线和8位数据位,p2为高8位地址线。 我使用XBYTE读取flash的数据,总有读错的情况发生。程序如下: ReadData=XBYTE[BankAddress];   _nop_(); & ...…

查看全部问答>

怎样设置ivt bluesoleil蓝牙局域网?

网线做的局域网我是能设的,但是想用蓝牙做,怎么设都不行,请教啦,…

查看全部问答>

硬盘的内部逻辑结构

   大家好,我最近在学习硬盘的逻辑结构时遇到了很大的麻烦。由于我从Google和百度上搜的资料太零散,太浅,学习不系统,导致对这方面的知识理解混乱。于是我想求助在这方面擅长的朋友,能否提供一些系统的资料,先行谢过了。…

查看全部问答>

转让南京万利51仿真器

本人有南京万利51仿真器一台. 8成新(用过一个多月). 欲转让给需要者. 仿真器见以下连接. http://www.manley.com.cn/chinese/ice/se52hu.htm 联系: littleliu97@sohu.com…

查看全部问答>

STM32用到的TFT屏幕资料及例程.欢迎补充

既然有人需要TFT屏 资料.放假在家也没什么事.整理一下自己手头有的吧.做个抛砖引玉.希望大家能吧自己方便分享的资料都上传上传~…

查看全部问答>

可以给推荐个这样的BOOST电路吗

求推荐这样一个BOOST电路。(不能外加电源)输入电压范围是17~170V,输出28V。由于这个范围太大,想进行两级变换,前级BOOST升压,将17~34V升到34V,后级将34~170降为28V。前端设计一个BOOST电路,当输入为17~34V时通过BOOST进行升压;当输入为34~1 ...…

查看全部问答>