我买了《轻松玩转STM32Cube》看第七章串口通信,7.4串口中断例子,
照着书上操作,用PROTEUS仿真,不成功,数据发不出来。
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_USART1_UART_Init(); /@@* USER CODE BEGIN 2 */ while(UserButtonStatus ==0) { HAL_GPIO_TogglePin (LED_GPIO_Port LED_Pin ); HAL_Delay (100); } HAL_GPIO_WritePin (LED_GPIO_Port LED_Pin GPIO_PIN_RESET ); if(HAL_UART_Transmit_IT(&huart1(uint8_t *)aTxBufferTXBUFFERSIZE )!=HAL_OK ) { Error_Handler (); } while(UartReady !=SET) { } UartReady =RESET ; //HAL_GPIO_WritePin (LED_GPIO_Port LED_Pin GPIO_PIN_SET ); if(HAL_UART_Receive_IT(&huart1 (uint8_t *)aRxBuffer RXBUFFERSIZE )!=HAL_OK ) { Error_Handler (); } while(UartReady !=SET) { } UartReady =RESET; if(Buffercmp((uint8_t *)aTxBuffer (uint8_t *)aRxBuffer RXBUFFERSIZE )) { Error_Handler (); } HAL_GPIO_WritePin (LED_GPIO_Port LED_Pin GPIO_PIN_SET ); /@@* USER CODE END 2 */ /@@* Infinite loop */ /@@* USER CODE BEGIN WHILE */ while (1) { /@@* USER CODE END WHILE */ /@@* USER CODE BEGIN 3 */ } /@@* USER CODE END 3 */ } 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 = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; 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 */ } static uint16_t Buffercmp(uint8_t *pBuffer1uint8_t *pBuffer2uint16_t BufferLength) { while(BufferLength --) { if((*pBuffer1 ) != *pBuffer2 ) { return BufferLength ; } pBuffer1 ++; pBuffer2 ++; } return 0; } void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle) { UartReady =SET; //HAL_GPIO_WritePin (LED_GPIO_Port LED_Pin GPIO_PIN_SET ); } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) { UartReady =SET; } void HAL_UART_ErrorCallback(UART_HandleTypeDef *UartHandle) { Error_Handler (); }
请高手看看,哪里有问题?谢谢!
MX_GPIO_Init(); MX_USART1_UART_Init();这两个函数有配置
MX_USART1_UART_Init();
这两个函数有配置
看一下中断优先级是否没有配置,因为这里用了中断的方式来收发数据
也可以尝试将那个发送函数改成没有中断,也就是轮询版本的,看一下能不能成功