CubeMX配置一个USART串口收发数过程分享,这里用的STM32F030F4,由于F103系列CUBEMX还只能陪着GPIO。

2019-10-14 22:01发布

话不多说上图:
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
36条回答
407741522
1楼-- · 2019-10-18 22:01
cornrn 发表于 2015-2-1 21:51
回复【17楼】正点原子:
---------------------------------
可是例程库函数就是你写的啊,讲解也挺好的。工 ...

嘿嘿,楼主你的dma历程有上传吗?
cornrn
2楼-- · 2019-10-18 23:31
407741522 发表于 2016-1-26 19:04
嘿嘿,楼主你的dma历程有上传吗?

这里我用的STM32L151RD 因为SPI和USART3 RX都是DMA 通道3 所以我用USART3 RX没有通道3,其实可以共用一个通道的,它的回调函数里面添加一个判断就可以了,主要我不交互用不到RX。
[mw_shl_code=applescript,true]void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(huart->Instance==USART3)
  {
  /* USER CODE BEGIN USART3_MspInit 0 */

  /* USER CODE END USART3_MspInit 0 */
    /* Peripheral clock enable */
    __USART3_CLK_ENABLE();
  
    /**USART3 GPIO Configuration   
    PB10     ------> USART3_TX
    PB11     ------> USART3_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    /* Peripheral DMA init*/
  
    hdma_usart3_tx.Instance = DMA1_Channel2;
    hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
    hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart3_tx.Init.MemInc = DMA_MINC_DISABLE;
    hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_usart3_tx.Init.Mode = DMA_NORMAL;
    hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW;
    HAL_DMA_Init(&hdma_usart3_tx);

    __HAL_LINKDMA(huart,hdmatx,hdma_usart3_tx);

  /* USER CODE BEGIN USART3_MspInit 1 */

  /* USER CODE END USART3_MspInit 1 */
  }

}[/mw_shl_code]



/* USART3 init function */
void MX_USART3_UART_Init(void)
{

  huart3.Instance = USART3;
  huart3.Init.BaudRate = 115200;
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
  huart3.Init.StopBits = UART_STOPBITS_1;
  huart3.Init.Parity = UART_PARITY_NONE;
  huart3.Init.Mode = UART_MODE_TX_RX;
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  HAL_UART_Init(&huart3);

}

runjiu
3楼-- · 2019-10-19 05:03
感谢分享,正在学习,佩服楼主!!!
cxjvae
4楼-- · 2019-10-19 05:32
楼主你好,我正在做moudbus协议的移植,然后遇到了一些问题我想问下有关于dma相关含书的用法,我用的是stm32f107的板子

DMA_SetCurrDataCounter(DMA2_Channel3,256);
DMA_SetCurrDataCounter(DMA2_Channel5,usSndBufferCount);
你知道在cube里面用哪两个两个函数是实现整个两个函数的功能吗?我画了好长时间去看手册都没看到与此功能相关的函数,我又是初学者,网指教。


cornrn
5楼-- · 2019-10-19 10:50
 精彩回答 2  元偷偷看……
cxjvae
6楼-- · 2019-10-19 11:11
谢谢楼主,我想问下你这个uart的工程能真能吃工作通信的吗?为什么我按照你的方法去做不行的?我的是107的板子。
HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
  
               
                 HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0x01);
这句是发送功能是把?就那么简单不用加其他语句?

一周热门 更多>