你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F412RE_LL_DMA_UART

[复制链接]
STMCU小助手 发布时间:2022-12-14 17:38
1.  CubeMX配置——UART

191f85c39c884f878fd6691d7a6a81d2.png

2.  CubeMX配置——DMA

f0021affdc994955a3ef5b7e67c4c18a.png

3.  CubeMX配置——设置LL库

4a2190d5a34b452892f673455f4a4216.png

4.  CubeMX配置——设置中断

不启动UART中断

fa6641a028d84432aec4b33c484631af.png

5.  添加自定义代码

在usart.c程序中添加代码,注意字段位置

  1. /* USER CODE BEGIN 0 */
  2. uint8_t uart_tx_data[100];
  3. uint8_t uart_rx_data[100];
  4. uint8_t uart_tx_len;
  5. /* USER CODE END 0 */
复制代码
  1.   /* USER CODE BEGIN USART1_Init 1 */
  2.   
  3.   LL_DMA_SetMemoryAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)uart_tx_data);
  4.   LL_DMA_SetPeriphAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)(&USART1->DR));
  5.   LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_7, 7);
  6.   LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7);
  7.   
  8.   LL_DMA_EnableIT_TC(DMA2, LL_DMA_STREAM_7);
  9.   LL_DMA_EnableIT_TE(DMA2, LL_DMA_STREAM_7);

  10.   LL_USART_EnableDMAReq_TX(USART1);
  11.    
  12.   /* USER CODE END USART1_Init 1 */
复制代码


在中断程序stm32f4xx_it.c添加代码,清除指定标志位
  1. void DMA2_Stream7_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN DMA2_Stream7_IRQn 0 */
  4.         if(LL_DMA_IsActiveFlag_TC7(DMA2))
  5.     {
  6.        LL_DMA_ClearFlag_TC7(DMA2);
  7.         }

  8.         if (LL_DMA_IsActiveFlag_TE7(DMA2))
  9.     {
  10.             LL_DMA_ClearFlag_TE7(DMA2);      
  11.         }
  12.   /* USER CODE END DMA2_Stream7_IRQn 0 */

  13.   /* USER CODE BEGIN DMA2_Stream7_IRQn 1 */

  14.   /* USER CODE END DMA2_Stream7_IRQn 1 */
  15. }
复制代码


在主程序main.c添加代码,注意字段位置

  1. /* USER CODE BEGIN 0 */
  2. uint8_t Uart1_DATA[] = "12345\r\n";
  3. extern uint8_t uart_tx_data[100];
  4. extern uint8_t uart_rx_data[100];
  5. extern uint8_t uart_tx_len;
  6. /* USER CODE END 0 */
复制代码
  1.   /* USER CODE END 2 */

  2.   /* Infinite loop */
  3.   /* USER CODE BEGIN WHILE */
  4.     LL_DMA_ClearFlag_TC7(DMA2);//

  5.     memcpy(uart_tx_data, Uart1_DATA, 7);

  6.     LL_DMA_DisableStream(DMA2, LL_DMA_STREAM_7);//
  7.     LL_DMA_SetMemoryAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)uart_tx_data);//
  8.     LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_7, 7);//
  9.     LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7);//

  10.   while (1)
  11.   {
  12.     //HAL_UART_Transmit_DMA(&huart1,Uart1_DATA,7);
  13.     //HAL_UART_Transmit(&huart1,Uart1_DATA,7,100);
  14.     LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7); //å¯åЍDMAä¼ è¾“
  15.     HAL_Delay(1000);
  16.     //__HAL_UART_RESET_HANDLE_STATE(&huart1);
  17.     /* USER CODE END WHILE */

  18.     /* USER CODE BEGIN 3 */
  19.   }
  20.   /* USER CODE END 3 */
复制代码


6.  串口接收到数据

cedf1e31e535428ea8239cef27e5a240.gif

————————————————
版权声明:xyang18


收藏 评论0 发布时间:2022-12-14 17:38

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版