历史上的今天
今天是:2024年12月10日(星期二)
2019年12月10日 | FreeModbus for stm32(Keil工程)——精简Modbus slave协议
2019-12-10 来源:eefocus
1、测试环境Keil MDK 4.7a stm32f103c8, PB12为输出线圈,可以通过Modbus Poll来控制线圈的输出状态。
2、通过ModbusProt.h配置硬件、数据缓冲区大小和功能码配置
3、移植要点为Port.c和Port.h
定时器操作在stm32平台下基本不用改
a、定时器初始化; xMBPortTimersInit()
b、开定时器及中断; vMBPortTimersEnable()
c、关定时器及中断; vMBPortTimersDisable()
d、定时器溢出中断服务程序;TIME_IQR_HANDLER()
串口操作:
a、串初始化; xMBPortSerialInit()
b、串口发送中断、接收中断; UART_IQR_HANDLER()
c、串口收发控制; vMBPortSerialEnable()
开关量操作 CPU硬件寄存器类型指针定义,用于定义IO输入和输出,
注意在此定义的IO必须初始化为输入或输出。
typedef volatile uint32_t * CPURegistertype;
//线圈状态, 存储格式:&IO输出口寄存器, 引脚号
MBCoilType MBCoils[REG_COILS_SIZE] = {
&(GPIOB->ODR), 12, //PB12做为输出线圈
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
};
//离散开关输入状态, 存储格式:&IO输出口寄存器, 引脚号
MBDiscreteType MBDiscretes[REG_DISCRETE_SIZE] = {
&(GPIOB->ODR), 12, //PB12做为离散输入
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
&(GPIOB->ODR), 12,
};
史海拾趣
|
上周举办的北京车展无疑是中国汽车圈最受瞩目的盛事,不过在车展揭幕以前,首先碰到的却是一家汽车零件业巨头——美国江森自控公司。该公司宣布在中国推出瓦尔塔品牌的汽车蓄电池,同时更加引起我注意的是,有关人员还透露说,该公司在混合动力轿车 ...… 查看全部问答> |
|
我对LPC2148定时器的捕获功能很糊涂, 哪位可以帮忙解释一下?当我把一个管脚设置成捕获功能后, 如果我把这个管脚和一个外置时钟连接, 我能否对这个时钟的上升, 下降沿进行捕获? 计数控制寄存器(CTCR) 和捕获控制寄存器(CCR)有什么区别? 谢 ...… 查看全部问答> |
|
外部晶振选用的4.096MHz,电容C1和C2都是20pF,电阻RF是1M。 觉得外部晶振没有起振呢,测晶振两脚的电压,各是0.37V,0.47V。 ICS的工作模式是使用FLL的外部模式FEE。 不知道原因出在哪了? 还请高手指点,谢谢~… 查看全部问答> |
|
各位大虾: 我用ST-LINK和J-LINK通过JTAG或者SWD方式都可以给目标板下载程序,但是换另外一块板子,只引出VDD GND JTMS JCLK 对其无论使用JLINK还是STLINK都无法下载,已确认用3v电池供电,求助!!!… 查看全部问答> |




