欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > STM32G070CBT6采用定时器实现1秒内发送N次数据

STM32G070CBT6采用定时器实现1秒内发送N次数据

2025/3/20 15:27:07 来源:https://blog.csdn.net/Backlight__/article/details/146360193  浏览:    关键词:STM32G070CBT6采用定时器实现1秒内发送N次数据

注:此处的N取值为1-10。

1.定时器配置

STM32CubeMX配置定时器可以参看文章:

使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)_stm32cubemx 怎么配置tim3 定时器-CSDN博客

将定时器的定时间时间配置为10ms,此处我的主频设置的是48M。

/* TIM3 init function */
void MX_TIM3_Init(void)
{/* USER CODE BEGIN TIM3_Init 0 *//* USER CODE END TIM3_Init 0 */TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};/* USER CODE BEGIN TIM3_Init 1 *//* USER CODE END TIM3_Init 1 */htim3.Instance = TIM3;htim3.Init.Prescaler = 48-1;htim3.Init.CounterMode = TIM_COUNTERMODE_UP;htim3.Init.Period = 10000-1;htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim3) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK){Error_Handler();}/* USER CODE BEGIN TIM3_Init 2 *//* USER CODE END TIM3_Init 2 */}

2.功能实现函数

发送率功能函数

volatile int LaserSendCount = 0;    //激光数据发送计数值
volatile int LaserSendInterval = 100;   //初始为1次/秒(100*10ms=1000ms)
volatile unsigned char LaserTxFlag = 0;    //激光发送标志位//激光发射率函数(发/秒),每秒发送多少个激光包,1-10
static void Laser_Rate(unsigned char rate)
{if(rate < 1){rate = 1;}if(rate > 10){rate = 10;}LaserSendInterval = 100 / rate;     //计算中断阈值if(LaserTxFlag) //激光发送标志位{LaserTxFlag = 0;//测试使用HAL_UART_Transmit_DMA(&huart4,"HELLO",5);}
}

定时器中断函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3)    //10ms           {if(++LaserSendCount > LaserSendInterval)    //发送{LaserSendCount = 0;LaserTxFlag = 1;    }}
}

主函数

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_TIM3_Init();MX_USART4_UART_Init();/* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim3);    /* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */Laser_Rate(5);    //在主函数中调用,1s发送五次/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

3.实现效果

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com