資源簡介
modbus主機源代碼,經測試,非常好用,也非常容易移植到STM32、51、AVR等單片機。

代碼片段和文件信息
#include?“stm32f10x.h“
#include?“bsp_usart.h“
#include?“bsp_key.h“
#include?“bsp_joystick.h“
#include?“modbusmaster.h“
#include?“crc16.h“
/*******************************************全局變量僅限本文件使用****************************************/
unsigned?char?Master_RxBuf[MASTER_RX_BUF_SIZE]={0};//主機接收緩沖區
unsigned?short?Master_RxCnt?=?0;???????????????????//接收數據計數器
unsigned?char?Master_RxFlag?=?0;
unsigned?char?g_ReplyTime?=?0;
unsigned?char?g_MasterSendData?=?0;
unsigned?char?g_MasterWriteRequest?=?0;
static?unsigned?short?ReadReg[8];
static?unsigned?short?WriteReg[6];
void?Master_Timing(unsigned?int?time_tick)
{
if(g_ReplyTime?>?0)g_ReplyTime?++;
if((time_tick?%?25)?==?0)g_MasterSendData?=?1;
}
//定時器7初始化
void?Timer7_Init(unsigned?int?ulBaudRate)
{
TIM_TimebaseInitTypeDef??TIM_TimebaseStructure;
NVIC_InitTypeDef?NVIC_InitStructure;
unsigned?short?PrescalerValue?=?(uint16_t)?(SystemCoreClock?/?20000L)?-?1;
unsigned?short?usTimerT35_50us=0; //數據幀最小間隔(ms)超過此時間則認為是下一幀
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7?ENABLE);?//TIM7時鐘使能?
if(?ulBaudRate?>?19200?)
{
usTimerT35_50us?=?35;???????/*?1800us.?*/
}
else
{
/*?The?timer?reload?value?for?a?character?is?given?by:
?*
?*?ChTimeValue?=?Ticks_per_1s?/?(?Baudrate?/?11?)
?*?????????????=?11?*?Ticks_per_1s?/?Baudrate
?*?????????????=?220000?/?Baudrate
?*?The?reload?for?t3.5?is?1.5?times?this?value?and?similary
?*?for?t3.5.
?*/
usTimerT35_50us?=?(?7UL?*?220000UL?)?/?(?2UL?*?ulBaudRate?);
}
//TIM7初始化設置RS485_frame_Distance*10
TIM_TimebaseStructure.TIM_Period?=?usTimerT35_50us;?//設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimebaseStructure.TIM_Prescaler?=PrescalerValue;?//設置用來作為TIMx時鐘頻率除數的預分頻值?設置計數頻率為10kHz
TIM_TimebaseStructure.TIM_ClockDivision?=?TIM_CKD_DIV1;?//設置時鐘分割:TDTS?=?Tck_tim
TIM_TimebaseStructure.TIM_CounterMode?=?TIM_CounterMode_Up;??//TIM向上計數模式
TIM_TimebaseInit(TIM7?&TIM_TimebaseStructure);?//根據TIM_TimebaseInitStruct中指定的參數初始化TIMx的時間基數單位
TIM_ClearFlag(TIM7?TIM_FLAG_Update);
TIM_ClearITPendingBit(TIM7?TIM_IT_Update);
TIM_SetCounter(TIM70x0000);
TIM_ITConfig(?TIM7TIM_IT_UpdateDISABLE);//TIM7?不允許更新中斷
TIM_Cmd(TIM7?ENABLE);?
//TIM7中斷分組配置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);?????????????//配置NVIC中斷優先級編組
NVIC_InitStructure.NVIC_IRQChannel?=TIM7_IRQn;??????????????//TIM7中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority?=?0;???//先占優先級0級
NVIC_InitStructure.NVIC_IRQChannelSubPriority?=?1;??????????//從優先級0級
NVIC_InitStructure.NVIC_IRQChannelCmd?=?ENABLE;?????????????//IRQ通道被使能
NVIC_Init(&NVIC_InitStructure);?????????????????????????????//根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器?
}
void?Master_Init(unsigned?long?ulBaudRate)
{
GPIO_InitTypeDef?GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|
RCC_APB2Periph_GPIOE|
RCC_APB2Periph_AFIOENABLE);
RCC_LSEConfig(RCC_LSE_OFF); //關閉外部低速外部時鐘信號功能后,PC13
GPIO_InitStructu
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3782??2017-03-01?23:07??Modbus\crc16.h
?????文件??????10767??2018-05-23?14:48??Modbus\ModbusMaster.c
?????文件???????1150??2018-05-08?16:55??Modbus\ModbusMaster.h
?????目錄??????????0??2018-05-23?14:48??Modbus
-----------?---------??----------?-----??----
????????????????15699????????????????????4
- 上一篇:使用硬連線控制器的CPU設計
- 下一篇:九章算法百度云.txt
評論
共有 條評論