硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1107|回复: 10
收起左侧

[UART] Usart1正常进入中断,仅修改Usart3相应配置缺不能正确进入中断

[复制链接]

4

主题

5

回帖

17

积分

新手上路

积分
17
发表于 2021-12-9 20:30:20 | 显示全部楼层 |阅读模式
代码用了论坛里面这位朋友的,通讯都正常。但是仅修改Uart3的相关配置,却不能进入中断。硬汉哥,能帮忙试下Uart3的代码么?谢谢。
STM32H7基于STM32CubeMX的串口DMA+空闲中断接收不定长数据实现(HAL库1.9.0自带函数实现) - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)


STM32V7_UART1.zip

10.06 MB, 下载次数: 17

STM32V7_UART3.zip

10.06 MB, 下载次数: 4

回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2021-12-9 22:10:52 | 显示全部楼层
你是不是就是在人家Usart1配置里改成Usart3,为啥不用cubemx生成的Usart3配置呢,你光改huart1成huart3就行了吗,寄存器配置一样吗,引脚也不一样啊,你啥都没改,就改个Usart3。老老实实配置Usart3生成代码
回复

使用道具 举报

3

主题

38

回帖

47

积分

新手上路

积分
47
发表于 2021-12-10 08:48:54 | 显示全部楼层
仔细看看HAL_UART_MspInit里面的配置  很多你都没改。
回复

使用道具 举报

4

主题

5

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2021-12-10 09:14:48 | 显示全部楼层
wklhwkl 发表于 2021-12-10 08:48
仔细看看HAL_UART_MspInit里面的配置  很多你都没改。

void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  if(uartHandle->Instance==USART3)
  {
  /* USER CODE BEGIN USART1_MspInit 0 */

  /* USER CODE END USART1_MspInit 0 */
  /** Initializes the peripherals clock
  */
    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3;
    PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
    {
      Error_Handler();
    }

    /* USART1 clock enable */
    __HAL_RCC_USART3_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**USART1 GPIO Configuration
    PA10     ------> USART1_RX
    PA9     ------> USART1_TX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    /* USART1 DMA Init */
    /* USART1_RX Init */
    hdma_usart1_rx.Instance = DMA1_Stream0;
    hdma_usart1_rx.Init.Request = DMA_REQUEST_USART3_RX;
    hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_usart1_rx.Init.Mode = DMA_NORMAL;
    hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW;
    hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx);

    /* USART1_TX Init */
    hdma_usart1_tx.Instance = DMA1_Stream1;
    hdma_usart1_tx.Init.Request = DMA_REQUEST_USART3_TX;
    hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
    hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_usart1_tx.Init.Mode = DMA_NORMAL;
    hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
    hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx);

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

  /* USER CODE END USART1_MspInit 1 */
  }
}
麻烦告知一下,哪里没改,谢谢。
回复

使用道具 举报

4

主题

5

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2021-12-10 09:15:26 | 显示全部楼层
weiyouren 发表于 2021-12-9 22:10
你是不是就是在人家Usart1配置里改成Usart3,为啥不用cubemx生成的Usart3配置呢,你光改huart1成huart3就行 ...

如果没有看代码,麻烦不要随口回复,谢谢。
回复

使用道具 举报

3

主题

38

回帖

47

积分

新手上路

积分
47
发表于 2021-12-10 12:01:57 | 显示全部楼层
nncrazy 发表于 2021-12-10 09:14
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{

看错了  不过好像又没发现问题。最后仿真看看  打开keil的peripherals直接看串口3寄存器 有没有打开空闲中断和接收中断吧。
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2021-12-10 14:28:55 | 显示全部楼层
nncrazy 发表于 2021-12-10 09:15
如果没有看代码,麻烦不要随口回复,谢谢。

你这人就是瞎掰的,麻烦你打开cube你配置usart3,系统帮你配置的是哪两个引脚?是PC10和PC11吧,看看你上面贴出来的代码,注释都说了uart1_rx PA10,uart1_tx pa9,你改都没改,能指望他工作吗,接着说DMA配置,你看看cube里,uart3的DMA是DMA1 stream2和DMA stream3而你也没改,就配置成uart1的DMA1 stream0和DMA1 stream0。你说你不是瞎掰的,我说让你打开cube点几下配置下。别就光改个uart3
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2021-12-10 14:49:29 | 显示全部楼层
nncrazy 发表于 2021-12-10 09:15
如果没有看代码,麻烦不要随口回复,谢谢。

我看错了,你改了引脚不过改错了,改成了PB10 PB11但其实是PC10和PC11
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2021-12-10 14:54:12 | 显示全部楼层
nncrazy 发表于 2021-12-10 09:15
如果没有看代码,麻烦不要随口回复,谢谢。

哦PB10和PB11也是Uart3,我没注意,刚看了下,引脚没错
回复

使用道具 举报

3

主题

38

回帖

47

积分

新手上路

积分
47
发表于 2021-12-10 14:56:27 | 显示全部楼层
weiyouren 发表于 2021-12-10 14:49
我看错了,你改了引脚不过改错了,改成了PB10 PB11但其实是PC10和PC11

H743II  PB10和PB11也可以映射为串口3
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2021-12-10 15:05:30 | 显示全部楼层
wklhwkl 发表于 2021-12-10 14:56
H743II  PB10和PB11也可以映射为串口3

你说的对,是我打字太快了,233333,那问题就是DMA通道没配置对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 03:55 , Processed in 0.183306 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表