• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32Cube生成STM32F串口中断代码仿真有问题

蓝蓝的天 2019-05-27 浏览量:873

我买了《轻松玩转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 ();
}
7.ICO.jpg
请高手看看,哪里有问题?谢谢!

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:3
  • pa9和pa10的两个管脚没有配置过,配置一下这两个管脚试试看

  •  MX_GPIO_Init();
    

    MX_USART1_UART_Init();

    这两个函数有配置

  • 看一下中断优先级是否没有配置,因为这里用了中断的方式来收发数据

    也可以尝试将那个发送函数改成没有中断,也就是轮询版本的,看一下能不能成功

相关问题

问题达人换一批

STM32Cube生成STM32F串口中断代码仿真有问题