stm32延时us寄存器_STM32之SYSCLK滴答精确延时程序 寄存器实现

#include "main.h"

GPIO_InitTypeDef GPIO_InitStructure;

void mysysint()//系统初始化程序

{

ErrorStatus HSEStartUpStatus;//说明标志位

RCC_DeInit();//所有外设全部缺省设置

/* Enable HSE */

RCC_HSEConfig(RCC_HSE_ON);

/* Wait till HSE is ready and if Time out is reached exit */

HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS)//启动成功

{

/*这两条FLASH指令必须加上,不知为啥?不加上就运行几秒后出错,参照系统初始化*/

/* Enable The Prefetch Buffer */

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//FLASH缓存开启

/* Configure the Latency cycle: Set 2 Latency cycles */

FLASH_SetLatency(FLASH_Latency_2);  //设置FLASH这些位表示SYSCLK(系统时钟)周期与闪存访问时间的比例,为010:两个等待状态,当 48MHz < SYSCLK ≤ 72MHz

/* Set PLL clock output to 72MHz using HSE (8MHz) as entry clock */

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//外部时钟为8M,PLL的输入时钟=8MHZ,倍频系数9,

/* Configure HCLK such as HCLK = SYSCLK */

RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置了啦AHB分频器的分频系数=1,即HCLK=SYSCLK=72MHZ

/* Configure PCLK1 such as PCLK1 = HCLK/2 */

RCC_PCLK1Config(RCC_HCLK_D

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于HAL库的stm32的HX711_Work()程序示例: ``` #include "stm32f1xx_hal.h" #include "HX711.h" //包含HX711库头文件 #define HX711_DOUT_Pin GPIO_PIN_3 // HX711模块数据引脚 #define HX711_DOUT_GPIO_Port GPIOA #define HX711_SCK_Pin GPIO_PIN_2 // HX711模块时钟引脚 #define HX711_SCK_GPIO_Port GPIOA HX711 scale(HX711_DOUT_Pin, HX711_SCK_Pin); // 创建一个HX711对象 void SystemClock_Config(void); int main(void) { HAL_Init(); SystemClock_Config(); __HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = HX711_DOUT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(HX711_DOUT_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = HX711_SCK_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(HX711_SCK_GPIO_Port, &GPIO_InitStruct); scale.set_scale(2280.0); // 设置HX711模块的比例因子 scale.tare(); // 设置HX711模块的初始偏移值 while (1) { float weight = scale.get_units(); // 读取HX711模块输出的重量数据 printf("Weight: %.2f g\n", weight); HAL_Delay(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.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | 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_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } ``` 在上面的示例代码中,我们使用了HX711库来驱动HX711模块,并将其连接到stm32的PA3和PA2引脚。在main()函数中,我们首先进行了GPIOA时钟的使能,并对HX711模块的数据引脚进行了初始化。接着,我们使用set_scale()函数来设置HX711模块的比例因子,使用tare()函数来设置HX711模块的初始偏移值。 在while(1)循环中,我们使用get_units()函数来读取HX711模块输出的重量数据,并将其转换为实际重量值。最后,我们使用printf()函数将重量值输出到串口中,并延迟1秒钟后再次进行测量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值