4G以太网工业级DTU基础例程:03.通用定时器

1、准备开发板

这里我选用了一块带以太网口插卡4G的DTU终端,可实现2G/3G/4G信号远距离数据透明传输通讯,以太网100Mbps有线传输通讯,通过工业RS232/485/422等接口直接连接设备进行无线远程传输。4G DTU在工业自动化上具有非常广泛的应用,而且具有传输数据量大,传输速度快,传输时延低,传输质量稳定的特点。弥补了NB模块传输速度慢、传输数据量少等缺点。尤其适合数据采集点分散、位置偏远、无人职守、有线通讯安装施工不便、成本高的行业,例如气象、环保、水利、电力、农业、交通、石油管线监控、城市管网监控、工业监控等,极大提高了数据通讯能力,节约人力物力成本,实现了数据通讯的跨越。
4G以太网工业级DTU基础例程:03.通用定时器
4G以太网工业级DTU基础例程:03.通用定时器

2、STM32CubeMX生成代码

4G以太网工业级DTU基础例程:03.通用定时器

搜索并选择芯片型号

4G以太网工业级DTU基础例程:03.通用定时器

配置系统时钟

4G以太网工业级DTU基础例程:03.通用定时器

配置Debug

4G以太网工业级DTU基础例程:03.通用定时器

配置GPIO

4G以太网工业级DTU基础例程:03.通用定时器
4G以太网工业级DTU基础例程:03.通用定时器

配置定时器

定时中断发生的时间计算T:

 T = ( arr + 1 )*( psc + 1 ) / 72M 当设置arr = 72,psc = 999时,T = 1000 us = 1 ms

4G以太网工业级DTU基础例程:03.通用定时器
4G以太网工业级DTU基础例程:03.通用定时器

配置时钟树

STM32F103RE的最高主频可达到72M,最后使HCLK = 72Mhz即可:

4G以太网工业级DTU基础例程:03.通用定时器
4G以太网工业级DTU基础例程:03.通用定时器

3、在MDK中编写代码

在gpio.h中的用户代码区编写以下代码

/* USER CODE BEGIN Private defines */

typedef enum
{
    
	LED_OFF = 0,
	LED_ON,
	LED_Toggle
        
} LED_ENUM;

#define LED2_Set(status) status != LED_Toggle ? HAL_GPIO_WritePin( LED2_GPIO_Port, LED2_Pin, status != LED_ON ? GPIO_PIN_RESET : GPIO_PIN_SET): HAL_GPIO_TogglePin( LED2_GPIO_Port, LED2_Pin);	//利用define可以美化和简短我们的代码,知识点就用到了三目运算符的嵌套判断。

/* USER CODE END Private defines */

在tim.h中的用户代码区编写以下代码

/* USER CODE BEGIN Prototypes */
void TIM_Interupt_Enable(void);
/* USER CODE END Prototypes */

在tim.c中的用户代码区编写以下代码

/* USER CODE BEGIN 0 */
uint32_t time2Count;
/* USER CODE END 0 */

/* USER CODE BEGIN 1 */

void TIM_Interupt_Enable(void)
{
	
	__HAL_TIM_ENABLE_IT(&htim2,TIM_IT_UPDATE);		//使能定时器更新中断
	HAL_TIM_Base_Start(&htim2);										//启动定时器
	
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM2)
	{
		if(__HAL_TIM_GET_IT_SOURCE(htim,TIM_IT_UPDATE) != RESET)		//如果触发了更新中断
		{
			if(time2Count++ >= 4294967295UL)						//防止数值溢出
			{
				time2Count = 0;
			}
			__HAL_TIM_CLEAR_IT(htim,TIM_IT_UPDATE);			//清除更新中断标志位
		}
	}
}


/* USER CODE END 1 */

在main中的main函数中编写以下代码

  /* USER CODE BEGIN 1 */
	uint32_t usart_time = 0;
  /* USER CODE END 1 */
/* USER CODE BEGIN 2 */
	TIM_Interupt_Enable();
  /* USER CODE END 2 */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		if(time2Count - usart_time >= 1000)		//(1ms * 1000)相当于延时1秒钟
		{
			usart_time = time2Count;				//记下当前定时器的数值
			LED2_Set(LED_Toggle)		//翻转LED状态
		}
		
  }
  /* USER CODE END 3 */

编译工程

4G以太网工业级DTU基础例程:03.通用定时器

4、配置烧录器

4G以太网工业级DTU基础例程:03.通用定时器
4G以太网工业级DTU基础例程:03.通用定时器
4G以太网工业级DTU基础例程:03.通用定时器

5、烧录代码

4G以太网工业级DTU基础例程:03.通用定时器

6、实验现象

控制LED小灯每1秒钟闪烁一次。

7、技术交流群

群号:1005311419

8、淘宝链接

https://item.taobao.com/item.htm?id=632070883411

上一篇:[noip6]模板


下一篇:tim不能改变消息记录文件夹解决,提示你没有权限在此写入数据