STM32中RCC库函数中振荡器配置代码简介(HAL库)

今天阅读该代码理清了思路,感谢的CSDN小飞哥玩嵌入式的文章,又针对官方库进行了注释,如有错误,请理解。

以HSE时钟配置为例

if (((RCC_OscInitStruct->OscillatorType)& RCC_OSCILLATORTYPE_HSE)==
    RCC_OSCILLATORTYPE_HSE)
{/检查输入变量正确否/
    assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));

   /*判读系统时钟是否为HSE或者PLL元为HSE,是的话进入if,否进入else准备设置为HSE为系统时钟*/
      if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
        || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && 
         (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE)))
     {
        
     /*如果状态寄存器值为就绪(就是该值不等于RESET)并且设定HSEState == RCC_HSE_OFF,此时 
         返回错误,该步骤防止HSE 在运行时关闭,*/  
         if ((__HAL_RCC_GET_FLAG(RCC_FLAG
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 MCU,串口是非常重要的通信接口。为了方便使用,ST官方提供了一套串口配置库函数,可以帮助开发者轻松配置串口参数和进行数据传输。下面是一个简单的使用STM32串口配置库函数的示例代码: ``` #include "stm32f4xx_hal.h" UART_HandleTypeDef huart2; void SystemClock_Config(void); int main(void) { HAL_Init(); SystemClock_Config(); __HAL_RCC_USART2_CLK_ENABLE(); huart2.Instance = USART2; huart2.Init.BaudRate = 115200; 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; HAL_UART_Init(&huart2); while (1) { char tx_data[] = "Hello, world!\n"; HAL_UART_Transmit(&huart2, (uint8_t*)tx_data, sizeof(tx_data), 1000); char rx_data[16]; HAL_UART_Receive(&huart2, (uint8_t*)rx_data, sizeof(rx_data), 1000); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1 |RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { Error_Handler(); } } ``` 这段代码使用了HAL库函数来配置串口参数和进行数据传输。具体来说,它使用了USART2接口,设置了波特率为115200,数据位为8位,停止位为1位,无奇偶校验,发送和接收模式均开启。然后在while循环,通过`HAL_UART_Transmit`函数发送一段字符串,然后通过`HAL_UART_Receive`函数接收一段字符串并存储到缓冲区。开发者可以根据实际需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值