extern void GPIO_interruptEdgeSelect(uint_fast8_t selectedPort, uint_fast16_t selectedPins, uint_fast8_t edgeSelect);

时间: 2024-01-21 09:04:51 浏览: 24
这是一个外部函数声明,声明了一个名为`_interruptEdgeSelect`的函数该函数用于配置GPIO口的中断触发边沿。 该函数接受三个参数: - `selectedPort`:指定GPIO口的端口号。 - `selectedPins`:指定GPIO口的引脚号。 - `edgeSelect`:指定中断触发的边沿类型。 根据这个声明,`GPIO_interruptEdgeSelect`函数可能是一个用于配置GPIO口中断的函数。具体的实现可能在其他地方定义。 要使用这个函数,你需要确保已经包含了声明所需的头文件,并在代码中调用该函数,传递适当的参数。例如: ```c GPIO_interruptEdgeSelect(GPIO_PORT_P1, GPIO_PIN1, GPIO_HIGH_TO_LOW_TRANSITION); ``` 这个示例调用了`GPIO_interruptEdgeSelect`函数,将P1.1引脚配置为高到低的边沿触发中断。 请注意,这只是函数声明,并没有提供函数的具体实现细节。如果要使用该函数,你需要查找或提供其实际的定义或实现。
相关问题

stm32f10x_gpio.h代码

以下是`stm32f10x_gpio.h`的代码: ```c /** ****************************************************************************** * @file stm32f10x_gpio.h * @author MCD Application Team * @version V3.5.0 * @date 09-March-2012 * @brief This file contains all the functions prototypes for the GPIO * firmware library. ****************************************************************************** * @attention * * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2> * * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You * may not use this file except in compliance with the License. You may obtain * a copy of the License at: * * http://www.st.com/software_license_agreement_liberty_v2 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __STM32F10x_GPIO_H #define __STM32F10x_GPIO_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" /** @addtogroup STM32F10x_StdPeriph_Driver * @{ */ /** @addtogroup GPIO * @{ */ /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ /** @defgroup GPIO_Exported_Constants * @{ */ /** @defgroup GPIO_pins_define * @{ */ #define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */ #define GPIO_Pin_1 ((uint16_t)0x0002) /*!< Pin 1 selected */ #define GPIO_Pin_2 ((uint16_t)0x0004) /*!< Pin 2 selected */ #define GPIO_Pin_3 ((uint16_t)0x0008) /*!< Pin 3 selected */ #define GPIO_Pin_4 ((uint16_t)0x0010) /*!< Pin 4 selected */ #define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */ #define GPIO_Pin_6 ((uint16_t)0x0040) /*!< Pin 6 selected */ #define GPIO_Pin_7 ((uint16_t)0x0080) /*!< Pin 7 selected */ #define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */ #define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */ #define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */ #define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */ #define GPIO_Pin_12 ((uint16_t)0x1000) /*!< Pin 12 selected */ #define GPIO_Pin_13 ((uint16_t)0x2000) /*!< Pin 13 selected */ #define GPIO_Pin_14 ((uint16_t)0x4000) /*!< Pin 14 selected */ #define GPIO_Pin_15 ((uint16_t)0x8000) /*!< Pin 15 selected */ #define GPIO_Pin_All ((uint16_t)0xFFFF) /*!< All pins selected */ /** * @} */ /** @defgroup GPIO_Speed_Legacy * @{ */ #define GPIO_Speed_10MHz GPIO_Speed_Level_1 /*!< I/O output speed: Low 2 MHz */ #define GPIO_Speed_2MHz GPIO_Speed_Level_2 /*!< I/O output speed: Medium 10 MHz */ #define GPIO_Speed_50MHz GPIO_Speed_Level_3 /*!< I/O output speed: Fast 50 MHz */ /** * @} */ /** @defgroup GPIO_Mode_define * @{ */ #define GPIO_Mode_AIN ((uint32_t)0x00000000) /*!< Analog mode */ #define GPIO_Mode_IN_FLOATING ((uint32_t)0x04) /*!< Input floating mode */ #define GPIO_Mode_IPD ((uint32_t)0x28) /*!< Input pull-down mode */ #define GPIO_Mode_IPU ((uint32_t)0x48) /*!< Input pull-up mode */ #define GPIO_Mode_Out_OD ((uint32_t)0x14) /*!< Output open-drain mode */ #define GPIO_Mode_Out_PP ((uint32_t)0x10) /*!< Output push-pull mode */ #define GPIO_Mode_AF_OD ((uint32_t)0x1C) /*!< Alternate function output open-drain mode */ #define GPIO_Mode_AF_PP ((uint32_t)0x18) /*!< Alternate function output push-pull mode */ /** * @} */ /** @defgroup GPIO_OType_define * @{ */ #define GPIO_OType_PP ((uint16_t)0x0000) /*!< Output push-pull */ #define GPIO_OType_OD ((uint16_t)0x0010) /*!< Output open-drain */ /** * @} */ /** @defgroup GPIO_PuPd_define * @{ */ #define GPIO_PuPd_NOPULL ((uint32_t)0x00000000) /*!< No pull-up or pull-down */ #define GPIO_PuPd_UP ((uint32_t)0x08) /*!< Pull-up */ #define GPIO_PuPd_DOWN ((uint32_t)0x18) /*!< Pull-down */ /** * @} */ /** @defgroup GPIO_Pin_sources * @{ */ #define GPIO_PinSource0 ((uint8_t)0x00) #define GPIO_PinSource1 ((uint8_t)0x01) #define GPIO_PinSource2 ((uint8_t)0x02) #define GPIO_PinSource3 ((uint8_t)0x03) #define GPIO_PinSource4 ((uint8_t)0x04) #define GPIO_PinSource5 ((uint8_t)0x05) #define GPIO_PinSource6 ((uint8_t)0x06) #define GPIO_PinSource7 ((uint8_t)0x07) #define GPIO_PinSource8 ((uint8_t)0x08) #define GPIO_PinSource9 ((uint8_t)0x09) #define GPIO_PinSource10 ((uint8_t)0x0A) #define GPIO_PinSource11 ((uint8_t)0x0B) #define GPIO_PinSource12 ((uint8_t)0x0C) #define GPIO_PinSource13 ((uint8_t)0x0D) #define GPIO_PinSource14 ((uint8_t)0x0E) #define GPIO_PinSource15 ((uint8_t)0x0F) /** * @} */ /** @defgroup GPIO_Alternate_function_selection_define * @{ */ #define GPIO_AF_0 ((uint8_t)0x00) /*!< Alternate function 0 */ #define GPIO_AF_1 ((uint8_t)0x01) /*!< Alternate function 1 */ #define GPIO_AF_2 ((uint8_t)0x02) /*!< Alternate function 2 */ #define GPIO_AF_3 ((uint8_t)0x03) /*!< Alternate function 3 */ #define GPIO_AF_4 ((uint8_t)0x04) /*!< Alternate function 4 */ #define GPIO_AF_5 ((uint8_t)0x05) /*!< Alternate function 5 */ #define GPIO_AF_6 ((uint8_t)0x06) /*!< Alternate function 6 */ #define GPIO_AF_7 ((uint8_t)0x07) /*!< Alternate function 7 */ #define GPIO_AF_8 ((uint8_t)0x08) /*!< Alternate function 8 */ #define GPIO_AF_9 ((uint8_t)0x09) /*!< Alternate function 9 */ #define GPIO_AF_10 ((uint8_t)0x0A) /*!< Alternate function 10 */ #define GPIO_AF_11 ((uint8_t)0x0B) /*!< Alternate function 11 */ #define GPIO_AF_12 ((uint8_t)0x0C) /*!< Alternate function 12 */ #define GPIO_AF_13 ((uint8_t)0x0D) /*!< Alternate function 13 */ #define GPIO_AF_14 ((uint8_t)0x0E) /*!< Alternate function 14 */ #define GPIO_AF_15 ((uint8_t)0x0F) /*!< Alternate function 15 */ /** * @} */ /** @defgroup GPIO_interrupt_sources * @{ */ #define GPIO_IT_Edge ((uint16_t)0x0001) /*!< Interrupt mode is enabled on rising edge */ #define GPIO_IT_Rising ((uint16_t)0x0002) /*!< Interrupt mode is enabled on rising edge */ #define GPIO_IT_Falling ((uint16_t)0x0004) /*!< Interrupt mode is enabled on falling edge */ #define GPIO_IT_High ((uint16_t)0x0008) /*!< Interrupt mode is enabled on high level */ #define GPIO_IT_Low ((uint16_t)0x0010) /*!< Interrupt mode is enabled on low level */ #define GPIO_IT_Port_Source ((uint16_t)0x0020) /*!< Interrupt mode is enabled on pin event */ /** * @} */ /** @defgroup GPIO_Legacy * @{ */ #define GPIO_Mode_Out_Slow GPIO_Mode_Out_PP #define GPIO_Mode_In_Floating GPIO_Mode_IN_FLOATING #define GPIO_Mode_In_PU GPIO_Mode_IPU #define GPIO_Mode_In_PD GPIO_Mode_IPD #define GPIO_Mode_Out_OD GPIO_Mode_Out_OD #define GPIO_Mode_Af_OD GPIO_Mode_AF_OD #define GPIO_Mode_Af_PP GPIO_Mode_AF_PP /** * @} */ /** * @} */ /* Exported macro ------------------------------------------------------------*/ /* Exported functions ------------------------------------------------------- */ /* Function used to set the GPIO configuration to the default reset state ****/ void GPIO_DeInit(GPIO_TypeDef* GPIOx); /* Initialization and Configuration functions *********************************/ void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); /* GPIO Read and Write functions **********************************************/ uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); /* GPIO Alternate functions configuration functions ***************************/ void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF); /* GPIO Interrupts configuration functions ************************************/ void GPIO_ITConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, FunctionalState NewState); void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); /* GPIO Low Level Interrupt management ***************************************/ void GPIO_SetInterrupt(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, Exti_TypeDef PortSource); void GPIO_ClearInterrupt(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); #ifdef __cplusplus } #endif #endif /* __STM32F10x_GPIO_H */ /** * @} */ /** * @} */ /******************* (C) COPYRIGHT 2012 STMicroelectronics *****END OF FILE****/ ```

#include "dht11.h" void Delay_us(uint16_t delay) { __HAL_TIM_DISABLE(&htim3); __HAL_TIM_SET_COUNTER(&htim3,0); __HAL_TIM_ENABLE(&htim3); uint16_t curCnt=0; while(1) { curCnt=__HAL_TIM_GET_COUNTER(&htim3); if(curCnt>=delay) break; } __HAL_TIM_DISABLE(&htim3); } void DHT11_OUT(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } void DHT11_IN(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } void DHT11_Strat(void) { DHT11_OUT(); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET); HAL_Delay(20); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET); Delay_us(30); } uint8_t DHT11_Check(void) { uint8_t retry = 0 ; DHT11_IN(); while(GPIO_PIN_SET == HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8) && retry <100) { retry++; Delay_us(1);//1us } if(retry>=100) {return 1;} else retry = 0 ; while(GPIO_PIN_RESET == HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8) && retry<100) { retry++; Delay_us(1);//1us } if(retry>=100) {return 1;} return 0 ; } uint8_t DHT11_Read_Bit(void) { uint8_t retry = 0 ; while(GPIO_PIN_SET==HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) && retry <100) { retry++; Delay_us(1); } retry = 0 ; while(GPIO_PIN_RESET==HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) && retry<100) { retry++; Delay_us(1); } Delay_us(40); if(GPIO_PIN_SET==HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8)) return 1; else return 0 ; } uint8_t DHT11_Read_Byte(void) { uint8_t i , dat ; dat = 0 ; for(i=0; i<8; i++) { dat <<= 1; dat |= DHT11_Read_Bit(); } return dat ; } uint8_t DHT11_Read_Data(uint8_t* temp , uint8_t* humi) { uint8_t buf[5]; uint8_t i; DHT11_Strat(); if(DHT11_Check() == 0) { for(i=0; i<5; i++) { buf[i] = DHT11_Read_Byte(); } if(buf[0]+buf[1]+buf[2]+buf[3] == buf[4]) { *humi = buf[0]; *temp = buf[2]; } }else return 1; return 0 ; } void func_1() { uint8_t temperature = 1 ; uint8_t humidity = 1; uint8_t aTXbuf[32] ; while(1){ DHT11_Read_Data(&temperature , &humidity); sprintf((char*)aTXbuf,"%d , %d %% \r\n" ,temperature ,humidity); HAL_UART_Transmit(&huart1, aTXbuf, strlen((const char*)aTXbuf), 200); HAL_Delay(5000); } } int temperature_humidity_device_control(protocol_package_t *pk) { printf("temperature_humidity_device_control\r\n"); if(pk->function == 0x16 && pk->data[0] == 0x00) { printf("temperature_humidity_device_control success\r\n"); uint8_t temperature = 1 ; uint8_t humidity = 1; uint8_t aTXbuf[32] ; //DHT11_Read_Data(&temperature , &humidity); pk->data[0] = 0x35; } return 0; }改错

在你提供的代码中,没有包含头文件 "main.h" 和 "stdio.h"。你需要添加这两个头文件到你的代码中,这样才能正确使用其中的函数和变量。 另外,你在调用 sprintf 函数时,第二个参数类型应该是 char*,而不是 uint8_t*。因此,你需要将 aTXbuf 声明为 char 类型数组,而不是 uint8_t 类型数组。同时,在使用 strlen 函数计算字符串长度时,应该传入一个 char* 类型的参数。 最后,你可以将 DHT11_Read_Data 函数的返回值直接返回,而不需要使用 if-else 语句判断后再返回。因为函数内部已经有了返回值,可以直接将其返回给调用者。 以下是修改后的代码: ```c #include "main.h" #include "stdio.h" #include "dht11.h" extern UART_HandleTypeDef huart1; extern TIM_HandleTypeDef htim3; void Delay_us(uint16_t delay) { __HAL_TIM_DISABLE(&htim3); __HAL_TIM_SET_COUNTER(&htim3,0); __HAL_TIM_ENABLE(&htim3); uint16_t curCnt=0; while(1) { curCnt=__HAL_TIM_GET_COUNTER(&htim3); if(curCnt>=delay) break; } __HAL_TIM_DISABLE(&htim3); } void DHT11_OUT(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } void DHT11_IN(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } void DHT11_Strat(void) { DHT11_OUT(); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET); HAL_Delay(20); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET); Delay_us(30); } uint8_t DHT11_Check(void) { uint8_t retry = 0 ; DHT11_IN(); while(GPIO_PIN_SET == HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8) && retry <100) { retry++; Delay_us(1);//1us } if(retry>=100) {return 1;} else retry = 0 ; while(GPIO_PIN_RESET == HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8) && retry<100) { retry++; Delay_us(1);//1us } if(retry>=100) {return 1;} return 0 ; } uint8_t DHT11_Read_Bit(void) { uint8_t retry = 0 ; while(GPIO_PIN_SET==HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) && retry <100) { retry++; Delay_us(1); } retry = 0 ; while(GPIO_PIN_RESET==HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) && retry<100) { retry++; Delay_us(1); } Delay_us(40); if(GPIO_PIN_SET==HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8)) return 1; else return 0 ; } uint8_t DHT11_Read_Byte(void) { uint8_t i , dat ; dat = 0 ; for(i=0; i<8; i++) { dat <<= 1; dat |= DHT11_Read_Bit(); } return dat ; } uint8_t DHT11_Read_Data(uint8_t* temp , uint8_t* humi) { uint8_t buf[5]; uint8_t i; DHT11_Strat(); if(DHT11_Check() == 0) { for(i=0; i<5; i++) { buf[i] = DHT11_Read_Byte(); } if(buf[0]+buf[1]+buf[2]+buf[3] == buf[4]) { *humi = buf[0]; *temp = buf[2]; return 0; } } return 1; } void func_1() { uint8_t temperature = 1; uint8_t humidity = 1; char aTXbuf[32]; while(1){ DHT11_Read_Data(&temperature , &humidity); sprintf(aTXbuf,"%d , %d %% \r\n" ,temperature ,humidity); HAL_UART_Transmit(&huart1, (uint8_t*)aTXbuf, strlen(aTXbuf), 200); HAL_Delay(5000); } } int temperature_humidity_device_control(protocol_package_t *pk) { printf("temperature_humidity_device_control\r\n"); if(pk->function == 0x16 && pk->data[0] == 0x00) { printf("temperature_humidity_device_control success\r\n"); uint8_t temperature = 1 ; uint8_t humidity = 1; char aTXbuf[32]; DHT11_Read_Data(&temperature , &humidity); sprintf(aTXbuf,"%d , %d %% \r\n" ,temperature ,humidity); strncpy((char*)pk->data, aTXbuf, strlen(aTXbuf)); pk->data_len = strlen(aTXbuf); pk->data[0] = 0x35; } return 0; } ```

相关推荐

#include "stm32f10x.h" #include "oled.h" #include "USART.h" void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { uint8_t data = USART_ReceiveData(USART1); if (usart_rx_len < USART_RX_BUF_SIZE) { usart_rx_buf[usart_rx_len++] = data; } } } void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_Cmd(USART1, ENABLE); }

解析代码extern __IO uint16_t ADC1_Value; extern __IO uint16_t ADC2_Value; ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc2; void MX_ADC1_Init(void){ ADC_ChannelConfTypeDef sConfig; hadc1.Instance = ADC1; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; if (HAL_ADC_Init(&hadc1) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } sConfig.Channel = ADC_CHANNEL_4; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }} void MX_ADC2_Init(void){ ADC_ChannelConfTypeDef sConfig; hadc2.Instance = ADC2; hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc2.Init.ContinuousConvMode = DISABLE; hadc2.Init.DiscontinuousConvMode = DISABLE; hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc2.Init.NbrOfConversion = 1; if (HAL_ADC_Init(&hadc2) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } sConfig.Channel = ADC_CHANNEL_5; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }} void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle){ GPIO_InitTypeDef GPIO_InitStruct; if(adcHandle->Instance==ADC1) { __HAL_RCC_ADC1_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(ADC1_2_IRQn); } else if(adcHandle->Instance==ADC2) { __HAL_RCC_ADC2_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(ADC1_2_IRQn); }} void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle){ if(adcHandle->Instance==ADC1) { __HAL_RCC_ADC1_CLK_DISABLE(); HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4); } else if(adcHandle->Instance==ADC2) { __HAL_RCC_ADC2_CLK_DISABLE(); HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5); }} void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadcx){ if(hadcx==&hadc1){ ADC1_Value=HAL_ADC_GetValue(hadcx);} if(hadcx==&hadc2){ ADC2_Value=HAL_ADC_GetValue(hadcx);}}

#include "stm32f10x.h" #include "bsp_SysTick.h" #include "bsp_led.h" #include "bsp_adc.h" extern __IO uint16_t ADC_ConvertedValue[2]; u16 SCAN_TIME=0; u16 CURRENT=1234; u16 a,b,c,d; void Delay(__IO u32 nCount); void SYSTICK_SCAN(void) { SCAN_TIME++; if(SCAN_TIME==1) { CLOSE_DISPLAY(); if(a==0) { DISPLAY(10);} else {DISPLAY(a);} GPIO_ResetBits(GPIOB, GPIO_Pin_12); } if(SCAN_TIME==2) { CLOSE_DISPLAY(); if(b==0) {DISPLAY(10);} else {DISPLAY(b);} GPIO_ResetBits(GPIOB, GPIO_Pin_14); } if(SCAN_TIME==3) { CLOSE_DISPLAY(); DISPLAY(c); GPIO_SetBits(GPIOB, GPIO_Pin_4); GPIO_ResetBits(GPIOB, GPIO_Pin_13); } if(SCAN_TIME>=4) { CLOSE_DISPLAY(); SCAN_TIME=0; DISPLAY(d); GPIO_ResetBits(GPIOB, GPIO_Pin_15); } } int main(void) { u16 i=0; u32 ADC_CURRENT,ADC_REF; u16 ADC_CURRENT_TEMP[10],ADC_REF_TEMP[10]; LED_GPIO_Config(); LED1_ON; Adc_Init(); SysTick_Init(); while(1) { ADC_CURRENT=0; ADC_REF=0; for(i=0;i<9;i++) { ADC_CURRENT_TEMP[i]=ADC_CURRENT_TEMP[i+1]; ADC_REF_TEMP[i]=ADC_REF_TEMP[i+1]; } Delay(500000); ADC_CURRENT_TEMP[9]=ADC_ConvertedValue[1]; ADC_REF_TEMP[9]=ADC_ConvertedValue[0]; for(i=0;i<10;i++) { ADC_CURRENT+=ADC_CURRENT_TEMP[i]; ADC_REF+=ADC_REF_TEMP[i]; } if(ADC_CURRENT*2>ADC_REF) //{CURRENT=((ADC_CURRENT*2-ADC_REF)*150)/4096;} {CURRENT=((ADC_CURRENT*2-ADC_REF)*165)/4096;} if(ADC_CURRENT*2<ADC_REF) //{CURRENT=((ADC_REF-ADC_CURRENT*2)*150)/4096;} {CURRENT=((ADC_REF-ADC_CURRENT*2)*165)/4096;} if(ADC_CURRENT*2==ADC_REF) {CURRENT=0;} if(CURRENT>2000) {CURRENT=2000;} a=CURRENT/1000; b=(CURRENT/100)%10; c=(CURRENT/10)%10; d=CURRENT%10; } } void Delay(__IO u32 nCount) { for( ; nCount != 0; nCount--); }详细的解释每一句代码

#include "global_define.h" uint8_t R_DiscOutVol_Cnt,R_Request_Num_BK,R_PPS_Request_Volt_BK; uint32_t R_PPS_Request_Cur_BK; uint8_t R_HVScan_RequestVol=0,R_HVScan_RequestVol_BK=0,Cnt_Delay_OutVol_Control=0; uint16_t R_VbatVol_Value,R_IbusCur_Value,R_IbatCur_Value; uint8_t R_Error_Time,R_WWDT_Time; TypeOfTimeFlag TimeFlag = {0}; TypeOfStateFlag StateFlag = {0}; //TypeOf_TypeC AP_TypeCA = {0}; TypeOf_TypeC AP_TypeCB = {0}; //TypeOf_PD AP_PDA = {0}; TypeOf_PD AP_PDB = {0}; const unsigned int CONFIG0 __at(0x00300000) = 0x0ED8F127; const uint32_t CONFIG1 __at(0x00300004) = 0x00C0FF3F; //ÓÐIAP¹¦ÄÜ,²»¿ª¿´ÃŹ·// //const unsigned int CONFIG1 __at(0x00300004) = 0x0040ffbf; const unsigned int CONFIG2 __at(0x00300008) = 0x1fffe000; const unsigned int CONFIG3 __at(0x0030000c) = 0x0000ffff; void SlotBranch100ms(void); void SlotBranch1s(void); volatile IsrFlag_Char R_Time_Flag; typedef struct{ uint8_t B_bit0: 1; }TestBits; TestBits Bits; #define check_8812 1 #define check_discharger 0 #define check_MOS 0 extern unsigned char display_gate; //¸Ãº¯ÊýÖ÷ÒªÓÃÀ´¼ì²émosµÄÓ¦Óᣠvoid check_nmos(void) { static unsigned int m,n=0; if(m<500) { m++; GPIO_WriteBit(GPIOB, GPIO_PinSource2, Bit_RESET); } else if(m<1000) { m++; GPIO_WriteBit(GPIOB, GPIO_PinSource2, Bit_SET); } else { m=0; } } unsigned char key_val=0; unsigned char device_state=0; unsigned int device_state_counter=0; #define device_state_counter_data 250 #define device_state_counter_data2 5 #define A_1 10 #define A_8 128 void led_inial(void) { DispBuf.Bits.FastCharge = RESET; DispInit(); } //Main function int main(void) { static unsigned int counter1,counter2=0,bufer; F_MCU_Initialization(); //MCU³õʼ»¯ HV_Init(); //*********************************************************************************** AP_TypeCB.TypeCx = TypeCB; AP_TypeCB.B_Support_HW = SET; AP_TypeCB.TypeC_Rp_Mode = TypeC_Cur

解释代码extern u16 ONE_SECOND_REACH_FLAG; extern u32 time_times; extern u32 alarm_delay_time; extern u16 alarm_delay_flag; extern uint32_t INPUT_DATA; u16 FARAWAY_SWTICH_FLAG = 0; u16 LOCAL_SWTICH_FLAG = 0; extern u16 CONTROL_COIL_DATA; u16 local_control_flag = 0; u16 far_control_flag = 0; extern u16 SET_PWM_DATA[4]; int main(void) { SystemInit(); NVIC_Configuration(); FLASH_Unlock(); RELAY_OUTPUT_IO_Init(); Adc_Init(); WWDG_NVIC_Init(); Timer2_Init(); CAN_Config(); SWITCH_INPUT_GPIO_Config(); USART5_Initialise(38400); NETIP_to_mcu_Initialise(9600); USART422_Initialise(9600); USART232_Initialise(9600); //初始化 RTU模式 从机地址为1 UART2 9600 无校验 eMBInit(MB_RTU, 0x01, 0x01, 9600, MB_PAR_NONE); //启动FreeModbus eMBEnable(); while (1) { // INPUT_DATA = 0x00000004; Calcu_FP_TEMP(); eMBPoll(); //modbus if (ONE_SECOND_REACH_FLAG) //1s { ONE_SECOND_REACH_FLAG = 0; // get422_ready_data(); //422 // netip_get_work_state_data(); //网口 // get232_ready_register(); //232 getusart5_ready_data(); } // SET_PWM_DATA[0] = 50; // SET_PWM_DATA[1] = 50; // SET_PWM_DATA[2] = 50; // SET_PWM_DATA[3] = 50; // scheduled_can_transmission();//can scan_input_state(); // communication485_protocol_solution();//485 //通信收发机 协议 方案 communicationusart5_protocol_solution(); //103 // getusart5_ready_data(); //获取485准备指示 get485_ready_register(); // communication422_protocol_solution(); // netip_communication_protocol_solution(); // communication_uart3_protocol_solution(); //232 //测试板 test_board_prog(); //控制 线圈 CONTROL_COIL(); } }

uint8_t RxFlag = 0; uint8_t RxCount = 0; extern DMA_HandleTypeDef hdma_usart1_rx; #define LENGTH 100 int fputc(int ch, FILE *f) { HAL_UART_Transmit (&huart1, (uint8_t *)&ch, 1,HAL_MAX_DELAY); return ch; } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ printf("******UART communication AA using IDLE TT + DMA******\r\n"); __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE); //使能IDLE中断 HAL_UART_Receive_DMA(&huart1,(uint8_t *)RxBuffer, LENGTH); //启动DMA接收 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(RxFlag==1) { RxFlag = 0; HAL_UART_DMAStop(&huart1); //停止串口DMA传输 RxCount = LENGTH - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx); HAL_UART_Transmit(&huart1,(uint8_t *)RxBuffer, RxCount,100); for(uint8_t i = 0; i < RxCount; i++) { RxBuffer[i]=0; } RxCount = 0; //重启动DMA HAL_UART_Receive_DMA(&huart1,(uint8_t *)RxBuffer, LENGTH); } } /* USER CODE END 3 */ },这段代码的作用是什么?

最新推荐

recommend-type

毕业设计MATLAB_执行一维相同大小矩阵的QR分解.zip

毕业设计matlab
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

帮我设计一个基于Android平台的便签APP的代码

很抱歉,我是一个语言模型AI,无法提供完整的Android APP代码。但是,我可以给您一些设计便签APP的建议和思路。 1. 界面设计 首先考虑APP的界面设计,便签APP通常需要一个主界面用于显示所有的便签,以及一个编辑界面用于编辑单个便签。主界面可以采用列表的形式,列出所有的便签,每个便签可以显示标题和摘要内容。在编辑界面中,用户可以输入标题和正文内容,并且可以设置提醒时间、标签、优先级等。 2. 数据存储 便签APP需要一个数据存储的方案,可以考虑使用SQLite数据库来存储便签数据。每个便签可以存储标题、正文内容、提醒时间、标签、优先级等信息。 3. 便签操作 便签APP
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MATLAB柱状图在数据分析中的作用:从可视化到洞察

![MATLAB柱状图在数据分析中的作用:从可视化到洞察](https://img-blog.csdnimg.cn/img_convert/1a36558cefc0339f7836cca7680c0aef.png) # 1. MATLAB柱状图概述** 柱状图是一种广泛用于数据可视化的图表类型,它使用垂直条形来表示数据中不同类别或组别的值。在MATLAB中,柱状图通过`bar`函数创建,该函数接受数据向量或矩阵作为输入,并生成相应的高度条形。 柱状图的优点在于其简单性和易于理解性。它们可以快速有效地传达数据分布和组别之间的比较。此外,MATLAB提供了广泛的定制选项,允许用户调整条形颜色、
recommend-type

ISP图像工程师需要掌握的知识技能

ISP图像工程师需要掌握一些相关的知识和技能,包括: 1. 图像处理的基本知识和方法,包括图像增强、滤波、分割、降噪等 2. 熟练掌握一门编程语言,可以使用这门语言实现图像处理算法,常用的编程语言包括C++、Python、Matlab等 3. 了解图像传感器的工作原理和特性,以及图像传感器的校准和校正 4. 熟悉图像处理的软件工具,包括Photoshop、GIMP等 5. 了解图像处理硬件系统的基本知识,包括DSP、FPGA、GPU等 6. 具有良好的数学功底,能够利用数学方法解决图像处理中的问题 7. 具有较强的解决问题的能力,能够独立分析和解决实际问题 8. 具有较强的沟通
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。