| @@ -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 */ | |||
| @@ -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 */ | |||
| @@ -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 | |||
| @@ -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 */ | |||
| @@ -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. | |||
| */ | |||
| @@ -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 | | |||
| @@ -0,0 +1,27 @@ | |||
| # Modbus相关知识点 | |||
| ## 基本概念 | |||
| - Modbus基本概念 | |||
| - 应用场景 | |||
| - 三种通信模式 | |||
| - 广播模式与单播模式 | |||
| - 事务处理流程 | |||
| - 寄存器相关概念 | |||
| ## 数据帧格式 | |||
| - 0x01功能码 | |||
| · 请求帧格式 | |||
| · 应答帧格式 | |||
| - 0x03功能码 | |||
| · 请求帧格式 | |||
| · 应答帧格式 | |||
| - 0x0f功能码 | |||
| · 请求帧格式 | |||
| · 应答帧格式 | |||
| - 0x10功能码 | |||
| · 请求帧格式 | |||
| · 应答帧格式 | |||
| ## 嵌入式平台 | |||
| - 串口通信 | |||
| - 网口通信 | |||
| - 人机界面 | |||
| @@ -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> | |||
| @@ -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 | |||