专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
STM32 上移植 FreeModbus RTU
2020-02-29 10:44
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
18304
20
20
解压 freemodbus v1.6 源码 看到如下文件目录结构
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
stm32jy
1楼-- · 2020-03-01 06:21
工程项目所在文件夹 FREEMODBUS 下创建 modbus 文件夹和 port 文件夹
加载中...
stm32jy
2楼-- · 2020-03-01 07:14
精彩回答 2 元偷偷看……
加载中...
stm32jy
3楼-- · 2020-03-01 08:25
进入 FreeModbusV1.6 下的 demo 文件夹,看到有各个平台的测试代码文件夹,没
看到 STM32 的,但是看到 BARE 这个不带任何平台的代码文件,将 FreeModbusV1.6 下
demoBAREport 下的所有文件拷贝到新建工程项目 FreeModbus 文件夹下port 文件夹中
加载中...
stm32jy
4楼-- · 2020-03-01 08:54
其中:
(1)、 port.h 需要修改。
(2)、 porteven.c 不需要任何修改
(3)、 portserial.c 需要修改
(4)、 porttimer.c 需要修改。
(5)、另外还需要在 main 函数增加 4 个回调函数。
(5.1)、操作输入寄存器的回调函数 eMBErrorCode eMBRegInputCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNRegs )
(5.2)、操作保持寄存器的回调函数 eMBErrorCode eMBRegHoldingCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )
(5.3 )、 操 作 线 圈 的 的 回 调 函 数 eMBErrorCode eMBRegCoilsCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode )
(5.4)、操作离散寄存器的的回调函数 eMBErrorCode eMBRegDiscreteCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
加载中...
stm32jy
5楼-- · 2020-03-01 08:56
打开 MDK,建立工程
加载中...
stm32jy
6楼-- · 2020-03-01 11:12
打开 portserial.c 文件,这个是移植串口的,不管是 ASCII 模式还是 RTU 模式都需
要串口支持的, void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )函数,使能
或失能串口的,移植代码如下
void
vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
/* If xRXEnable enable serial receive interrupts. If xTxENable enable* transmitter empty interrupts.
*/
if (xRxEnable) //接收使能
{
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //使能接收中断
GPIO_ResetBits(GPIOG, GPIO_Pin_8); //设置 RS485 接收
}
else //失能
{
USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); //失能接收中断
GPIO_SetBits(GPIOG, GPIO_Pin_8); //设置 RS485 发送
}
if (xTxEnable) //发送使能
{
USART_ITConfig(USART2, USART_IT_TC, ENABLE); //使能
GPIO_SetBits(GPIOG, GPIO_Pin_8); //设置 RS485 发送
}
else //失能
{
USART_ITConfig(USART2, USART_IT_TC, DISABLE); //失能
GPIO_ResetBits(GPIOG, GPIO_Pin_8); //设置 RS485 接收
}
}
复制代码
加载中...
上一页
1
2
3
4
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
看到 STM32 的,但是看到 BARE 这个不带任何平台的代码文件,将 FreeModbusV1.6 下
demoBAREport 下的所有文件拷贝到新建工程项目 FreeModbus 文件夹下port 文件夹中
(1)、 port.h 需要修改。
(2)、 porteven.c 不需要任何修改
(3)、 portserial.c 需要修改
(4)、 porttimer.c 需要修改。
(5)、另外还需要在 main 函数增加 4 个回调函数。
(5.1)、操作输入寄存器的回调函数 eMBErrorCode eMBRegInputCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNRegs )
(5.2)、操作保持寄存器的回调函数 eMBErrorCode eMBRegHoldingCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )
(5.3 )、 操 作 线 圈 的 的 回 调 函 数 eMBErrorCode eMBRegCoilsCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode )
(5.4)、操作离散寄存器的的回调函数 eMBErrorCode eMBRegDiscreteCB( UCHAR *
pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
要串口支持的, void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )函数,使能
或失能串口的,移植代码如下
- void
- vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
- {
- /* If xRXEnable enable serial receive interrupts. If xTxENable enable* transmitter empty interrupts.
- */
- if (xRxEnable) //接收使能
- {
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //使能接收中断
- GPIO_ResetBits(GPIOG, GPIO_Pin_8); //设置 RS485 接收
- }
- else //失能
- {
- USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); //失能接收中断
- GPIO_SetBits(GPIOG, GPIO_Pin_8); //设置 RS485 发送
- }
- if (xTxEnable) //发送使能
- {
- USART_ITConfig(USART2, USART_IT_TC, ENABLE); //使能
- GPIO_SetBits(GPIOG, GPIO_Pin_8); //设置 RS485 发送
- }
- else //失能
- {
- USART_ITConfig(USART2, USART_IT_TC, DISABLE); //失能
- GPIO_ResetBits(GPIOG, GPIO_Pin_8); //设置 RS485 接收
- }
- }
复制代码一周热门 更多>