ソースを参照

配置了一下串口

master
ywh 1週間前
コミット
32de64be9f
10個のファイルの変更335行の追加13行の削除
  1. +2
    -2
      .mxproject
  2. +1
    -1
      Core/Inc/stm32f4xx_hal_conf.h
  3. +1
    -0
      Core/Inc/stm32f4xx_it.h
  4. +37
    -1
      Core/Src/main.c
  5. +71
    -0
      Core/Src/stm32f4xx_hal_msp.c
  6. +15
    -0
      Core/Src/stm32f4xx_it.c
  7. +158
    -0
      Document/0_Modbus任务要求.md
  8. +27
    -0
      Document/1_Modbus相关技术点.txt
  9. +3
    -0
      EWARM/Modbus.ewp
  10. +20
    -9
      Modbus.ioc

+ 2
- 2
.mxproject
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 1
Core/Inc/stm32f4xx_hal_conf.h ファイルの表示

@@ -64,7 +64,7 @@
/* #define HAL_MMC_MODULE_ENABLED */
/* #define HAL_SPI_MODULE_ENABLED */
/* #define HAL_TIM_MODULE_ENABLED */
/* #define HAL_UART_MODULE_ENABLED */
#define HAL_UART_MODULE_ENABLED
/* #define HAL_USART_MODULE_ENABLED */
/* #define HAL_IRDA_MODULE_ENABLED */
/* #define HAL_SMARTCARD_MODULE_ENABLED */


+ 1
- 0
Core/Inc/stm32f4xx_it.h ファイルの表示

@@ -55,6 +55,7 @@ void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void USART1_IRQHandler(void);
void OTG_FS_IRQHandler(void);
/* USER CODE BEGIN EFP */



+ 37
- 1
Core/Src/main.c ファイルの表示

@@ -41,6 +41,7 @@
/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart1;

/* USER CODE BEGIN PV */

@@ -49,6 +50,7 @@
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */
@@ -88,6 +90,7 @@ int main(void)
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USB_DEVICE_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */

/* USER CODE END 2 */
@@ -97,7 +100,7 @@ int main(void)
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
@@ -152,6 +155,39 @@ void SystemClock_Config(void)
HAL_RCC_EnableCSS();
}

/**
* @brief USART1 Initialization Function
* @param None
* @retval None
*/
static void MX_USART1_UART_Init(void)
{

/* USER CODE BEGIN USART1_Init 0 */

/* USER CODE END USART1_Init 0 */

/* USER CODE BEGIN USART1_Init 1 */

/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_EVEN;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */

/* USER CODE END USART1_Init 2 */

}

/**
* @brief GPIO Initialization Function
* @param None


+ 71
- 0
Core/Src/stm32f4xx_hal_msp.c ファイルの表示

@@ -76,6 +76,77 @@ void HAL_MspInit(void)
/* USER CODE END MspInit 1 */
}

/**
* @brief UART MSP Initialization
* This function configures the hardware resources used in this example
* @param huart: UART handle pointer
* @retval None
*/
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(huart->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspInit 0 */

/* USER CODE END USART1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_USART1_CLK_ENABLE();

__HAL_RCC_GPIOA_CLK_ENABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 */

/* USER CODE END USART1_MspInit 1 */

}

}

/**
* @brief UART MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param huart: UART handle pointer
* @retval None
*/
void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{
if(huart->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspDeInit 0 */

/* USER CODE END USART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART1_CLK_DISABLE();

/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);

/* USART1 interrupt DeInit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 */

/* USER CODE END USART1_MspDeInit 1 */
}

}

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

+ 15
- 0
Core/Src/stm32f4xx_it.c ファイルの表示

@@ -56,6 +56,7 @@

/* External variables --------------------------------------------------------*/
extern PCD_HandleTypeDef hpcd_USB_OTG_FS;
extern UART_HandleTypeDef huart1;
/* USER CODE BEGIN EV */

/* USER CODE END EV */
@@ -199,6 +200,20 @@ void SysTick_Handler(void)
/* please refer to the startup file (startup_stm32f4xx.s). */
/******************************************************************************/

/**
* @brief This function handles USART1 global interrupt.
*/
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */

/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */

/* USER CODE END USART1_IRQn 1 */
}

/**
* @brief This function handles USB On The Go FS global interrupt.
*/


+ 158
- 0
Document/0_Modbus任务要求.md ファイルの表示

@@ -0,0 +1,158 @@
# Modbus通信
## 任务要求
- 了解Modbus的基本概念

- 熟悉功能码0x01、0x03、0x0f、0x10

- 书写规格书
· 使用word文档书写

- 书写方案书
· 使用Visio绘制流程图
· 使用word文档书写
- 书写测试大纲
· 书写测试大纲以保证自身产品的正确性、稳定性
· 使用word文档书写

- 实现ModbusRTU主站(触摸屏)
· 能够正常连接
· 能够判断连接断开
· 能够按要求生成请求帧
· 能够正确解析应答帧,并做相应处理
· 能够进行超时处理
· 拥有美观易操作的人机界面
- 实现ModbusRTU从站(PLC)
· 能够正常连接
· 能够判断连接断开
· 能够正确解析请求帧
· 对于正确请求帧给出正确应答帧
· 对于错误请求帧给出错误应答帧或按规格给出相应的处理

附加功能:
- 如果需要读取0x10000位置的寄存器该如何处理?
- 如果需要读取所有单数个寄存器,如何提高读取效率?
- 如果需要获取通信历史该如何处理?
- 如果从机数据需要断电不丢失该怎么处理?
- 提高人机交互的美观性及易用性。

注:
- 该任务需要基于ucos移植实现
- Modbus学习需要书写相关学习笔记
- 线圈和寄存器范围都是0~0x270F
- 要求方案书有明确的层级结构
- 最终实现代码需要与方案书相一致
- 代码书写需按照给定的代码规范完成
- 对于解析部分需要做对应的单元测试
- 代码管理空间为:``http://gitea.xinje.cc/TrainCamp_姓名全拼_Modbus.git``
- 目录结构如下图所示:
TrainCamp_姓名全拼_modbus
|---iar
| |---settings
| |---XXX.dep
| |---XXX.ewd
| |---XXX.ewp
| |---XXX.eww
| |---XXX.icf
| +---startup_stm32xxx.s
|---app
| |---main.h
| +---main.c
|---cmsis
| |---core_cm3.h
| | .
| | .
| | .
| +---tz_context.h
|---drivers
| |---inc
| | +---stm32f103_gpio.h
| +---src
| +---stm32f103_gpio.h
|---modbus
+---.gitignore

## 任务器材
| 器材 | 数量 |
| ---------- | --------- |
| XDM-60T4-E/XDM-60T10-E | 1台 |
| ST-LINK | 1个 |
| 电源线 | 1根 |
| USB-COM | 1个 |
| XVP线 | 2根 |
| TG765-MT | 1台 |

## XDM-60T4-E硬件信息

- 芯片型号: STM32F407IG ,晶振12MHz。
- 引脚信息

| 芯片引脚 | 实际作用 |
| --------- | -------- |
| I0 | PH10 |
| I1 | PH11 |
| I2 | PG8 |
| I3 | PB4 |
| I4 | PB5 |
| I5 | PG12 |
| I6 | PB6 |
| I7 | PB7 |
| I10 | PF10 |
| I11 | PA15 |
| I12 | PB3 |
| I13 | PA14 |
| I14 | PI4 |
| I15 | PI5 |
| I16 | PI6 |
| I17 | PI7 |
| I20 | PE2 |
| Q0 | PF6 |
| Q1 | PF8 |
| Q2 | PF7 |
| Q3 | PF9 |
| Q4 | PI8 |
| Q5 | PE6 |
| Q6 | PE5 |
| Q7 | PE4 |
| Q10 | PG7 |
| Q11 | PG6 |
| Q12 | PH9 |
| Q13 | PH8 |
| Q14 | PH7 |
| Q15 | PH6 |
| Q16 | PF11 |
| Q17 | PB0 |
| Q20 | PH5 |
| USART1_TX | PA9 |
| USART1_RX | PA10 |

## XDM-60T10-E硬件信息

- 芯片型号:STM32F407ZG,晶振12MHz。
- 引脚信息

| 芯片引脚 | 实际作用 |
| --------- | -------- |
| I0 | PA0 |
| I1 | PA1 |
| I2 | PG8 |
| I3 | PB4 |
| I4 | PB5 |
| I5 | PG12 |
| I6 | PB6 |
| I7 | PB7 |
| I10 | PF10 |
| I11 | PA15 |
| I12 | PB3 |
| I13 | PA14 |
| Q0 | PF6 |
| Q1 | PF8 |
| Q2 | PF7 |
| Q3 | PF9 |
| USART1_TX | PA9 |
| USART1_RX | PA10 |


+ 27
- 0
Document/1_Modbus相关技术点.txt ファイルの表示

@@ -0,0 +1,27 @@
# Modbus相关知识点
## 基本概念
- Modbus基本概念
- 应用场景
- 三种通信模式
- 广播模式与单播模式
- 事务处理流程
- 寄存器相关概念

## 数据帧格式
- 0x01功能码
· 请求帧格式
· 应答帧格式
- 0x03功能码
· 请求帧格式
· 应答帧格式
- 0x0f功能码
· 请求帧格式
· 应答帧格式
- 0x10功能码
· 请求帧格式
· 应答帧格式
## 嵌入式平台
- 串口通信
- 网口通信
- 人机界面

+ 3
- 0
EWARM/Modbus.ewp ファイルの表示

@@ -1148,6 +1148,9 @@
<file>
<name>$PROJ_DIR$/../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c</name>
</file>
<file>
<name>$PROJ_DIR$/../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c</name>
</file>
</group>
<group>
<name>CMSIS</name>


+ 20
- 9
Modbus.ioc ファイルの表示

@@ -10,18 +10,21 @@ Mcu.Family=STM32F4
Mcu.IP0=NVIC
Mcu.IP1=RCC
Mcu.IP2=SYS
Mcu.IP3=USB_DEVICE
Mcu.IP4=USB_OTG_FS
Mcu.IPNb=5
Mcu.IP3=USART1
Mcu.IP4=USB_DEVICE
Mcu.IP5=USB_OTG_FS
Mcu.IPNb=6
Mcu.Name=STM32F407I(E-G)Tx
Mcu.Package=LQFP176
Mcu.Pin0=PH0-OSC_IN
Mcu.Pin1=PH1-OSC_OUT
Mcu.Pin2=PA11
Mcu.Pin3=PA12
Mcu.Pin4=VP_SYS_VS_Systick
Mcu.Pin5=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
Mcu.PinsNb=6
Mcu.Pin2=PA9
Mcu.Pin3=PA10
Mcu.Pin4=PA11
Mcu.Pin5=PA12
Mcu.Pin6=VP_SYS_VS_Systick
Mcu.Pin7=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
Mcu.PinsNb=8
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407IGTx
@@ -38,11 +41,16 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX
PA11.Mode=Device_Only
PA11.Signal=USB_OTG_FS_DM
PA12.Mode=Device_Only
PA12.Signal=USB_OTG_FS_DP
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PCC.Checker=false
PCC.Display=Plot\: All Steps
PCC.Line=STM32F407/417
@@ -88,7 +96,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,4-MX_USART1_UART_Init-USART1-false-HAL-true
RCC.48MHZClocksFreq_Value=48000000
RCC.AHBFreq_Value=168000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
@@ -123,6 +131,9 @@ RCC.VCOI2SOutputFreq_Value=192000000
RCC.VCOInputFreq_Value=1000000
RCC.VCOOutputFreq_Value=336000000
RCC.VcooutputI2S=96000000
USART1.IPParameters=VirtualMode,Parity
USART1.Parity=PARITY_EVEN
USART1.VirtualMode=VM_ASYNC
USB_DEVICE.CLASS_NAME_FS=CDC
USB_DEVICE.IPParameters=VirtualMode-CDC_FS,VirtualModeFS,CLASS_NAME_FS
USB_DEVICE.VirtualMode-CDC_FS=Cdc


読み込み中…
キャンセル
保存