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

望京做网站公司韶关seo

望京做网站公司,韶关seo,wordpress 搜索伪静态,品牌建设是一个循序渐进的过程目录 1#xff0c;问#xff1a; 1#xff0c;答#xff1a; 示例代码 正确的HAL库初始化方式 自定义初始化方式#xff08;不推荐#xff09; 总结 2#xff0c;问#xff1a; 2#xff0c;答#xff1a; 代码详细解释 初始部分 主初始化部分 初始化调用…目录 1问 1答 示例代码 正确的HAL库初始化方式 自定义初始化方式不推荐 总结 2问 2答 代码详细解释 初始部分 主初始化部分 初始化调用 FIFO阈值设置和FIFO模式禁用 结尾部分 特定代码的作用 1. huart1.Init.OneBitSampling UART_ONE_BIT_SAMPLE_DISABLE; 2. huart1.Init.ClockPrescaler UART_PRESCALER_DIV1; 3. huart1.AdvancedInit.AdvFeatureInit UART_ADVFEATURE_NO_INIT; 总结 3问 3答 HAL_UART_MspInit 函数 HAL_UART_MspDeInit 函数 总结 提问模型GPT-4o-Free 提问时间2024.07.01 1问 为什么一定要在HAL_UART_MspInit中配置GPIO引脚不能自己创建一个函数吗 1答 在STM32 HAL库的框架下HAL_UART_MspInit函数是专门用于配置UART外设的相关资源的包括GPIO引脚、时钟和中断。这是一个约定俗成的机制旨在确保外设的初始化过程清晰、有序且易于维护。虽然你可以创建自己的函数来配置这些资源但在HAL_UART_MspInit中配置GPIO引脚有几个重要原因 HAL库的设计规范 HAL库在初始化UART外设时会自动调用相应的MspInit函数比如HAL_UART_MspInit。这是库设计的一部分确保所有外设的初始化步骤都集中管理不会遗漏任何必要的配置。 代码的可维护性和一致性 使用HAL库提供的MspInit函数可以保持代码的一致性使得所有外设的初始化过程都遵循同样的模式方便阅读和维护。开发团队或后续开发者可以快速理解和修改代码而不需要查找自定义的初始化函数。 防止遗漏关键步骤 HAL_UART_MspInit不仅用于配置GPIO引脚还用于启用时钟、配置中断等。如果在其他地方进行这些配置可能会遗漏某些步骤导致外设无法正常工作。 分离硬件相关配置和业务逻辑 将硬件相关的配置如GPIO、时钟、中断集中在MspInit函数中可以使业务逻辑与硬件配置分离增强代码的模块化和可移植性。 自动调用机制 当调用HAL_UART_Init时HAL库会自动调用HAL_UART_MspInit。如果配置散落在其他自定义函数中这种自动调用机制将失效必须手动确保所有初始化步骤都已执行增加了出错的可能性。 示例代码 正确的HAL库初始化方式 void HAL_UART_MspInit(UART_HandleTypeDef* huart) {GPIO_InitTypeDef GPIO_InitStruct {0};if(huart-Instance USART2) {__HAL_RCC_USART2_CLK_ENABLE(); // 使能USART2时钟__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟/**USART2 GPIO ConfigurationPA2 ------ USART2_TXPA3 ------ USART2_RX*/GPIO_InitStruct.Pin GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStruct.Mode GPIO_MODE_AF_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Alternate GPIO_AF7_USART2;HAL_GPIO_Init(GPIOA, GPIO_InitStruct);// USART2中断配置如果需要HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART2_IRQn);} }自定义初始化方式不推荐 虽然你可以创建一个自定义函数但这不符合HAL库的最佳实践 void My_UART_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};__HAL_RCC_USART2_CLK_ENABLE(); // 使能USART2时钟__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟/**USART2 GPIO ConfigurationPA2 ------ USART2_TXPA3 ------ USART2_RX*/GPIO_InitStruct.Pin GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStruct.Mode GPIO_MODE_AF_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Alternate GPIO_AF7_USART2;HAL_GPIO_Init(GPIOA, GPIO_InitStruct);// USART2中断配置如果需要HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART2_IRQn); }// 然后在初始化UART时手动调用这个函数 void USART2_Init(void) {huart2.Instance USART2;huart2.Init.BaudRate 9600;huart2.Init.WordLength UART_WORDLENGTH_8B;huart2.Init.StopBits UART_STOPBITS_1;huart2.Init.Parity UART_PARITY_NONE;huart2.Init.Mode UART_MODE_TX_RX;huart2.Init.HwFlowCtl UART_HWCONTROL_NONE;huart2.Init.OverSampling UART_OVERSAMPLING_16;My_UART_Init(); // 手动调用自定义的初始化函数if (HAL_UART_Init(huart2) ! HAL_OK) {// 初始化错误处理Error_Handler();} }总结 虽然你可以自己创建一个函数来配置GPIO引脚但遵循HAL库的规范使用HAL_UART_MspInit进行配置可以提高代码的可维护性、一致性和可靠性避免遗漏重要的配置步骤。这种方法确保了代码的模块化和可读性尤其在团队开发和长期维护中具有明显的优势。 2问 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;   huart1.Init.OneBitSampling UART_ONE_BIT_SAMPLE_DISABLE;   huart1.Init.ClockPrescaler UART_PRESCALER_DIV1;   huart1.AdvancedInit.AdvFeatureInit UART_ADVFEATURE_NO_INIT;   if (HAL_UART_Init(huart1) ! HAL_OK)   {     Error_Handler();   }   if (HAL_UARTEx_SetTxFifoThreshold(huart1, UART_TXFIFO_THRESHOLD_1_8) ! HAL_OK)   {     Error_Handler();   }   if (HAL_UARTEx_SetRxFifoThreshold(huart1, UART_RXFIFO_THRESHOLD_1_8) ! HAL_OK)   {     Error_Handler();   }   if (HAL_UARTEx_DisableFifoMode(huart1) ! HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN USART1_Init 2 */   /* USER CODE END USART1_Init 2 */ } 详细解释这段代码 并且说明这几句的作用   huart1.Init.OneBitSampling UART_ONE_BIT_SAMPLE_DISABLE;   huart1.Init.ClockPrescaler UART_PRESCALER_DIV1;   huart1.AdvancedInit.AdvFeatureInit UART_ADVFEATURE_NO_INIT; 2答 这段代码是用来初始化STM32微控制器上的USART1外设的。它使用了HAL库提供的API来配置USART1的各种参数。下面是对这段代码的详细解释以及对指定几句的作用说明。 代码详细解释 初始部分 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;huart1.Init.OneBitSampling UART_ONE_BIT_SAMPLE_DISABLE;huart1.Init.ClockPrescaler UART_PRESCALER_DIV1;huart1.AdvancedInit.AdvFeatureInit UART_ADVFEATURE_NO_INIT;这些代码设置了USART1的各种初始化参数 huart1.Instance USART1;指定要初始化的USART外设实例为USART1。huart1.Init.BaudRate 115200;设置波特率为115200。huart1.Init.WordLength UART_WORDLENGTH_8B;设置数据字长度为8位。huart1.Init.StopBits UART_STOPBITS_1;设置停止位为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;设置过采样为16倍。huart1.Init.OneBitSampling UART_ONE_BIT_SAMPLE_DISABLE;禁用单比特采样。huart1.Init.ClockPrescaler UART_PRESCALER_DIV1;设置时钟预分频器为1。huart1.AdvancedInit.AdvFeatureInit UART_ADVFEATURE_NO_INIT;不初始化高级特性。 初始化调用 if (HAL_UART_Init(huart1) ! HAL_OK){Error_Handler();}调用HAL库的HAL_UART_Init函数来初始化USART1。如果初始化失败调用Error_Handler处理错误。 FIFO阈值设置和FIFO模式禁用 if (HAL_UARTEx_SetTxFifoThreshold(huart1, UART_TXFIFO_THRESHOLD_1_8) ! HAL_OK){Error_Handler();}if (HAL_UARTEx_SetRxFifoThreshold(huart1, UART_RXFIFO_THRESHOLD_1_8) ! HAL_OK){Error_Handler();}if (HAL_UARTEx_DisableFifoMode(huart1) ! HAL_OK){Error_Handler();}这些代码进一步配置USART1的FIFO设置 HAL_UARTEx_SetTxFifoThreshold(huart1, UART_TXFIFO_THRESHOLD_1_8)设置发送FIFO的阈值为1/8。HAL_UARTEx_SetRxFifoThreshold(huart1, UART_RXFIFO_THRESHOLD_1_8)设置接收FIFO的阈值为1/8。HAL_UARTEx_DisableFifoMode(huart1)禁用FIFO模式。 结尾部分 /* USER CODE BEGIN USART1_Init 2 *//* USER CODE END USART1_Init 2 */ }这些部分是用户代码的插入点可以在这些地方添加用户定义的代码通常用于初始化后的后处理。 特定代码的作用 1. huart1.Init.OneBitSampling UART_ONE_BIT_SAMPLE_DISABLE; 这一行代码禁用单比特采样模式。单比特采样模式用于在低速率下减少误码率通过多次采样决定一个比特的值。禁用它表示系统在正常的单次采样模式下工作。 2. huart1.Init.ClockPrescaler UART_PRESCALER_DIV1; 这一行代码设置时钟预分频器为1。这意味着输入时钟直接用于UART不进行任何分频。预分频器可以用来调整UART时钟以匹配不同的波特率要求。 3. huart1.AdvancedInit.AdvFeatureInit UART_ADVFEATURE_NO_INIT; 这一行代码表示不初始化任何高级特性。UART的高级特性可能包括自动波特率检测、数据反转、MSB/LSB优先级选择等。这行代码禁用这些特性保持UART的基本配置。 总结 这段代码配置了STM32的USART1外设设置了波特率、数据长度、停止位、奇偶校验、工作模式、硬件流控制、过采样率、FIFO设置等参数。通过调用HAL_UART_Init等函数确保USART1能够按照指定配置正常工作。 3问 void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) {   GPIO_InitTypeDef GPIO_InitStruct {0};   RCC_PeriphCLKInitTypeDef PeriphClkInit {0};   if(uartHandle-InstanceUSART1)   {   /* USER CODE BEGIN USART1_MspInit 0 */   /* USER CODE END USART1_MspInit 0 */   /** Initializes the peripherals clocks   */     PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_USART1;     PeriphClkInit.Usart1ClockSelection RCC_USART1CLKSOURCE_PCLK2;     if (HAL_RCCEx_PeriphCLKConfig(PeriphClkInit) ! HAL_OK)     {       Error_Handler();     }     /* USART1 clock enable */     __HAL_RCC_USART1_CLK_ENABLE();     __HAL_RCC_GPIOA_CLK_ENABLE();     /**USART1 GPIO Configuration     PA9     ------ USART1_TX     PA10     ------ USART1_RX     */     GPIO_InitStruct.Pin GPIO_PIN_9|GPIO_PIN_10;     GPIO_InitStruct.Mode GPIO_MODE_AF_PP;     GPIO_InitStruct.Pull GPIO_NOPULL;     GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;     GPIO_InitStruct.Alternate GPIO_AF7_USART1;     HAL_GPIO_Init(GPIOA, GPIO_InitStruct);     /* USART1 interrupt Init */     HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);     HAL_NVIC_EnableIRQ(USART1_IRQn);   /* USER CODE BEGIN USART1_MspInit 1 */   /* USER CODE END USART1_MspInit 1 */   } } void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) {   if(uartHandle-InstanceUSART1)   {   /* USER CODE BEGIN USART1_MspDeInit 0 */   /* USER CODE END USART1_MspDeInit 0 */     /* Peripheral clock disable */     __HAL_RCC_USART1_CLK_DISABLE();     /**USART1 GPIO Configuration     PA9     ------ USART1_TX     PA10     ------ USART1_RX     */     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);     /* USART1 interrupt Deinit */     HAL_NVIC_DisableIRQ(USART1_IRQn);   /* USER CODE BEGIN USART1_MspDeInit 1 */   /* USER CODE END USART1_MspDeInit 1 */   } } 详细解释这段代码 3答 这段代码包含了两个函数HAL_UART_MspInit 和 HAL_UART_MspDeInit分别用于初始化和反初始化USART1的相关硬件资源。这些函数通常在使用HAL库进行外设初始化和反初始化时被自动调用。下面是对这段代码的详细解释。 HAL_UART_MspInit 函数 HAL_UART_MspInit函数用于配置USART1的相关硬件资源包括时钟、GPIO引脚和中断。 void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) {GPIO_InitTypeDef GPIO_InitStruct {0};RCC_PeriphCLKInitTypeDef PeriphClkInit {0};if(uartHandle-InstanceUSART1){/* USER CODE BEGIN USART1_MspInit 0 *//* USER CODE END USART1_MspInit 0 *//** Initializes the peripherals clocks*/PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_USART1;PeriphClkInit.Usart1ClockSelection RCC_USART1CLKSOURCE_PCLK2;if (HAL_RCCEx_PeriphCLKConfig(PeriphClkInit) ! HAL_OK){Error_Handler();}时钟配置 设置外设时钟的选择。PeriphClkInit.PeriphClockSelection RCC_PERIPHCLK_USART1 表示选择USART1的外设时钟。设置USART1的时钟源为PCLK2。PeriphClkInit.Usart1ClockSelection RCC_USART1CLKSOURCE_PCLK2。调用HAL_RCCEx_PeriphCLKConfig函数应用时钟配置。如果配置失败调用Error_Handler处理错误。 /* USART1 clock enable */ __HAL_RCC_USART1_CLK_ENABLE(); 使能USART1时钟调用__HAL_RCC_USART1_CLK_ENABLE函数使能USART1外设的时钟。 __HAL_RCC_GPIOA_CLK_ENABLE();/**USART1 GPIO ConfigurationPA9 ------ USART1_TXPA10 ------ USART1_RX*/GPIO_InitStruct.Pin GPIO_PIN_9|GPIO_PIN_10;GPIO_InitStruct.Mode GPIO_MODE_AF_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate GPIO_AF7_USART1;HAL_GPIO_Init(GPIOA, GPIO_InitStruct);使能GPIOA时钟调用__HAL_RCC_GPIOA_CLK_ENABLE函数使能GPIOA端口的时钟。配置GPIO引脚 设置GPIO引脚9和10为USART1的TX和RX功能。设置GPIO模式为复用推挽输出GPIO_MODE_AF_PP。设置引脚不上拉GPIO_NOPULL。设置引脚速度为低速GPIO_SPEED_FREQ_LOW。设置引脚的复用功能为USART1GPIO_AF7_USART1。调用HAL_GPIO_Init函数应用GPIO配置。 /* USART1 interrupt Init */HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART1_IRQn);USART1中断配置 设置USART1中断的优先级为0。启用USART1中断。 /* USER CODE BEGIN USART1_MspInit 1 *//* USER CODE END USART1_MspInit 1 */} }用户代码插入点这些部分是用户代码的插入点可以在这些地方添加自定义代码以便在初始化过程中执行额外的操作。 HAL_UART_MspDeInit 函数 HAL_UART_MspDeInit函数用于反初始化USART1的相关硬件资源包括时钟、GPIO引脚和中断。 void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) {if(uartHandle-InstanceUSART1){/* USER CODE BEGIN USART1_MspDeInit 0 *//* USER CODE END USART1_MspDeInit 0 */条件判断检查传入的uartHandle实例是否为USART1。 /* Peripheral clock disable */__HAL_RCC_USART1_CLK_DISABLE();关闭USART1时钟调用__HAL_RCC_USART1_CLK_DISABLE函数关闭USART1外设的时钟。 /**USART1 GPIO ConfigurationPA9 ------ USART1_TXPA10 ------ USART1_RX*/HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);反初始化GPIO引脚调用HAL_GPIO_DeInit函数反初始化GPIO引脚9和10将其配置恢复到复位状态。 /* USART1 interrupt Deinit */HAL_NVIC_DisableIRQ(USART1_IRQn);禁用USART1中断调用HAL_NVIC_DisableIRQ函数禁用USART1中断。 /* USER CODE BEGIN USART1_MspDeInit 1 *//* USER CODE END USART1_MspDeInit 1 */} }用户代码插入点这些部分是用户代码的插入点可以在这些地方添加自定义代码以便在反初始化过程中执行额外的操作。 总结 HAL_UART_MspInit函数用于初始化USART1的相关硬件资源包括时钟、GPIO引脚和中断。HAL_UART_MspDeInit函数用于反初始化USART1的相关硬件资源将其配置恢复到复位状态。使用这些函数可以确保外设的硬件资源在初始化和反初始化过程中得到正确配置和释放从而保证系统的正常运行和资源管理。
http://www.dnsts.com.cn/news/77990.html

相关文章:

  • 网站开发招聘最新消息关于申请建设网站的请示
  • 创建网站的六个步骤网站开发培训哪个好
  • 一个企业网站的建设流程口腔网站模板
  • 怎么建个公司网站做网站的流程分析
  • 唐山网站制作服务公司网站设计公司 广州
  • 深圳市住房建设局官方网站花瓣网图片素材官网
  • 佳木斯 两学一做 网站哪些网站做的好处和坏处
  • 织梦摄影网站源码wordpress文件缓存
  • 网站建设自检自查怎么用dw第一次做网站
  • 免费手机网站申请网站首页备案号链接
  • 广州哪里有外贸网站济源哪里做网站
  • 长沙开发网站的公司哪家好面板安装wordpress
  • 北京网站建设运营设计装修app
  • wordpress发表文章消息自助建站优化
  • 最牛的网站建开发app怎么盈利
  • 中国企业500强江阴有几家资阳优化团队市场
  • 厦门响应式网站做网站如何自己寻找客户
  • 重庆产品网站推广徐州如何提高网站建设
  • 深圳专业做网站建网站价格济南做网站的公司有哪些
  • 广州最好的网站建设公司做一款小说网站
  • 网络优化推广 网站开发建设化妆品网站建设方案
  • dede网站模板 医疗网站关键词选取的步骤
  • 网站建设本科毕业设计论文网站建设 乐视
  • 淘宝网站做多久有哪些网站主页做的比较好看
  • 免费asp网站空间我的网站不做推广 百度能搜索到我网站吗
  • 温州哪里有做网站的公司4000-262-做外汇的网站
  • wordpress如何安装优化大师怎么样
  • 网站创建怎么做北京网站开发公司哪里济南兴田德润优惠吗
  • 在合肥做网站前端月薪大概多少装企网站建设
  • 做网站能设置关键词在百度中搜索到中国教师教育培训网