当前位置: 首页 > news >正文

触屏网站建设正能量网站下载

触屏网站建设,正能量网站下载,专业的网站开发联系方式,泰安手机网站建设电话背景 在项目开发过程中,经常会使用MCU的串口与外界进行通信,例如两个单片机之间TTL电平型串口通信,单片机与成熟电路模块之间的串口通信等等.... 如何高效的使用串口是开发人员必须关注的问题。 STM32的HAL库为我们提供了三种串口通信机制&am…

背景

        在项目开发过程中,经常会使用MCU的串口与外界进行通信,例如两个单片机之间TTL电平型串口通信,单片机与成熟电路模块之间的串口通信等等.... 如何高效的使用串口是开发人员必须关注的问题。

        STM32的HAL库为我们提供了三种串口通信机制:

(1)查询方式。

        查询方式主要采用查询串口状态寄存器接收和发送相关标志,知道数据发送或接收成功。发送一般可采用这种方式,接收采用这种方式效率比较低。

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

(2)中断方式

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

(3)DMA方式

        DMA的方式主要采用以下两个函数。但该函数内部机制都是打开DMA通道中断,采用的是DMA中断的方式。但在使用的过程中,可关闭DMA中断,直接采用DMA接收和放送,降低了CPU负载。

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

应用

        串口发送数据可直接采用查询和DMA的方式发送,尽量不采用中断方式(包括DMA中断方式)。串口接收数据具有随机性,一般采用中断方式和DMA中断接收,前者一般单字节触发接收,后者一般定长字符触发DMA中断接收。但对于接收字符长度和时间不确定问题,一般可采用串口空闲中断+DMA接收机制。

      空闲中断的概念

        接收数据后RXNE置位,且之后间隔一个字节的时钟未收到数据则触发IDLE中断。

        (1)按照配置工具正常配置,打开串口中断和DMA接收

        (2)关闭DMA中断

static void MX_DMA_Init(void)
{/* DMA controller clock enable */__HAL_RCC_DMA1_CLK_ENABLE();/* DMA interrupt init *//* DMA1_Channel5_IRQn interrupt configuration */
//  HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 0, 0);
//  HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn);}

        (3)串口配置空闲中断,使能DMA接收。

#define  UART_REV_SIZE   50
uint8_t  gRevBuff[UART_REV_SIZE] = {0};
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 = 115200;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 */__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);HAL_UART_Receive_DMA(&huart1, gRevBuff, UART_REV_SIZE);/* USER CODE END USART1_Init 2 */
}

        (4)串口中断处理

        在串口中断添加如下处理。

void USART1_IRQHandler(void)
{/* USER CODE BEGIN USART1_IRQn 0 */uint16_t  revLen = 0;/* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 */if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE)==1){HAL_UART_DMAStop(&huart1);__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_IDLE);revLen = UART_REV_SIZE - __HAL_DMA_GET_COUNTER(huart1.hdmarx);HAL_UART_Receive_DMA(&huart1, gRevBuff, UART_REV_SIZE);}/* USER CODE END USART1_IRQn 1 */
}

   结论

               在线断点调试,串口中断不会频繁进入,有效降低了CPU负载。

http://www.yayakq.cn/news/407339/

相关文章:

  • 四川建设厅电话网站慈云寺网站建设
  • 淘口令微信网站怎么做官方网站建设 磐石网络多少费用
  • 同城分类信息网站建设汇中建设 官方网站
  • 百度刷自己网站的关键词区块链网站怎么做
  • 桂林广告公司网站建设新网站如何被网站收录
  • 网站到期续费要多少钱网站建设需要多少钱文档
  • 南京市住房城乡建设门户网站城乡建设局网站首页
  • 网站建设报价方案.xls三室一厅装修效果图
  • 免费网站后台管理系统南宁网站建设哪家公
  • 网站群建设技术方案重庆市建设工程信息网查询人员
  • 网站建设合同属于什么税目建设网站的情况说明书
  • 网站开发培训训网站地图的使用
  • 做网站生意不赚钱做网站的术语
  • 中国国际贸易网站邯郸网站建设选哪家
  • 做电影网站要怎么拿到版权wordpress使用缩略图
  • 出境旅游哪个网站做的好南宁网站建设外包
  • 网站改版如何做301现在公众号做电影网站的发展
  • 网站首页适合vue做吗长沙征帆网站建设
  • 中江门户网站北京建设网华樾领尚规划图
  • 怎么做自己的淘宝网站wordpress的小工具怎么用
  • 九度企业网站推广软件给别人建网站工作行吗
  • 固安建设局网站建设部法律法规网站
  • 网站域名怎么购买做视频网站公司要怎么做
  • 济宁网站建设 优化培训设计怎么学
  • php旅游类网站开发毕业设计百度竞价推广收费标准
  • 万户网站协作管理系统简单静态网页制作
  • 北京网站备案代理简约中国风免费ppt模板
  • 网站seo优化方法虾皮跨境电商平台
  • 做网页赚钱的网站广州市车管所网站建设
  • 中国建设招标网官方网站wordpress还有价值么