专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
STM32 上移植 FreeModbus RTU
2020-02-29 10:44
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
18308
20
20
解压 freemodbus v1.6 源码 看到如下文件目录结构
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
stm32jy
1楼-- · 2020-03-01 16:17
精彩回答 2 元偷偷看……
加载中...
stm32jy
2楼-- · 2020-03-01 19:36
发送一个字节函数 BOOL xMBPortSerialPutByte( CHAR ucByte )
BOOL
xMBPortSerialPutByte( CHAR ucByte )
{
/* Put a byte in the UARTs transmit buffer. This function is called
* by the protocol stack if pxMBFrameCBTransmitterEmpty( ) has been
* called. */
USART_SendData(USART2, ucByte); //发送一个字节
return TRUE;
}
复制代码
加载中...
stm32jy
3楼-- · 2020-03-01 22:38
接收一个字节函数 BOOL xMBPortSerialGetByte( CHAR * pucByte )
BOOL
xMBPortSerialGetByte( CHAR * pucByte )
{
/* Return the byte in the UARTs receive buffer. This function is called
* by the protocol stack after pxMBFrameCBByteReceived( ) has been called.
*/
*pucByte = USART_ReceiveData(USART2); //接收一个字节
return TRUE;
}
复制代码
加载中...
stm32jy
4楼-- · 2020-03-02 03:57
串口中断服务函数 void USART2_IRQHandler(void)
void USART2_IRQHandler(void)
{
if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET) //接收中断
{
prvvUARTRxISR();USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
if (USART_GetITStatus(USART2, USART_IT_TC) == SET) //发送中断
{
prvvUARTTxReadyISR();
USART_ClearITPendingBit(USART2, USART_IT_TC);
}
}
复制代码
加载中...
stm32jy
5楼-- · 2020-03-02 08:00
打开 porttimer.c 文件, RTU 模式需要定时器支持,定时器初始化函数
BOOL
xMBPortTimersInit( USHORT usTim1Timerout50us )
BOOL
xMBPortTimersInit( USHORT usTim1Timerout50us )
{
// return FALSE;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
uint16_t PrescalerValue = 0;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//
//HCLK 为 72MHz
//时基频率 72 / (1 + Prescaler) = 20KHz
//
PrescalerValue = (uint16_t)((SystemCoreClock / 20000) - 1);
//
//初始化定时器参数
//
TIM_TimeBaseStructure.TIM_Period = (uint16_t)usTim1Timerout50us;
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
//
//使能预装
//
TIM_ARRPreloadConfig(TIM2, ENABLE);
//
//初始化中断优先级//
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE);
TIM_Cmd(TIM2, DISABLE);
return TRUE;
}
复制代码
加载中...
stm32jy
6楼-- · 2020-03-02 09:24
精彩回答 2 元偷偷看……
加载中...
上一页
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
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- BOOL
- xMBPortSerialPutByte( CHAR ucByte )
- {
- /* Put a byte in the UARTs transmit buffer. This function is called
- * by the protocol stack if pxMBFrameCBTransmitterEmpty( ) has been
- * called. */
- USART_SendData(USART2, ucByte); //发送一个字节
- return TRUE;
- }
复制代码- BOOL
- xMBPortSerialGetByte( CHAR * pucByte )
- {
- /* Return the byte in the UARTs receive buffer. This function is called
- * by the protocol stack after pxMBFrameCBByteReceived( ) has been called.
- */
- *pucByte = USART_ReceiveData(USART2); //接收一个字节
- return TRUE;
- }
复制代码- void USART2_IRQHandler(void)
- {
- if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET) //接收中断
- {
- prvvUARTRxISR();USART_ClearITPendingBit(USART2, USART_IT_RXNE);
- }
- if (USART_GetITStatus(USART2, USART_IT_TC) == SET) //发送中断
- {
- prvvUARTTxReadyISR();
- USART_ClearITPendingBit(USART2, USART_IT_TC);
- }
- }
复制代码- BOOL
- xMBPortTimersInit( USHORT usTim1Timerout50us )
- BOOL
- xMBPortTimersInit( USHORT usTim1Timerout50us )
- {
- // return FALSE;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- uint16_t PrescalerValue = 0;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
- //
- //HCLK 为 72MHz
- //时基频率 72 / (1 + Prescaler) = 20KHz
- //
- PrescalerValue = (uint16_t)((SystemCoreClock / 20000) - 1);
- //
- //初始化定时器参数
- //
- TIM_TimeBaseStructure.TIM_Period = (uint16_t)usTim1Timerout50us;
- TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
- //
- //使能预装
- //
- TIM_ARRPreloadConfig(TIM2, ENABLE);
- //
- //初始化中断优先级//
- NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
- TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE);
- TIM_Cmd(TIM2, DISABLE);
- return TRUE;
- }
复制代码一周热门 更多>