![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式相关
super尚
热爱学习的一枚研究僧
展开
-
GD32写4字节flash函数
GD32的写入flash代码,写入32位数据:主要是fmc的解锁上锁,然后用的是gd32f30x_fmc.c的函数fmc_page_erase——擦除,(一页1KB或者2KB 具体看芯片代码)fmc_word_program——字写入(uint32_t)如果需要半字写入,那就替换为下边这个函数:fmc_halfword_program——半字写入(uint16_t)void iap_write_u32(uint32_t appxaddr,uint32_t data){ fmc_unloc原创 2021-08-19 10:50:22 · 2568 阅读 · 0 评论 -
freemodbus在使用485时出现数据少一位,在串口就没问题
主要是modbus有问题,就是最后一个字节的数据出现错误,即CRC校验值不对。查阅资料得知,进入发送完成中断以后,还要延时2-4ms等待串口数据完全发送出去才使能485接收,不然会导致最后一个字节发送不完,解决方法:在如下图:portserial.c中,在使能接收之前添加一个大概2ms的延时即可...原创 2021-08-19 10:19:46 · 1601 阅读 · 0 评论 -
freemodbus源码笔记
首先会一直在eMBPoll中轮询,查看是否有事件发生,如果有的话就用switch语句来跳转到相应的事件。EV_READY是在协议栈初始化后xMBRTUTimerT35Expired函数发出来的,表示startup完成如果是接收数据帧事件那么会跳转到下图的代码:该段代码通过peMBFrameReceiveCur函数,调用eMBRTUReceive,在eMBRTUReceive函数中首先查看帧大小是否符合要求,然后进行CRC校验。此函数的原型是:eMBRTUReceive( UCHAR * pucRcv原创 2021-08-05 09:17:01 · 550 阅读 · 3 评论