这次有幸参加 正点原子STM32H7R3开发套件 的评测,计划使用 正点原子STM32H7R3开发套件,来完成一个 4G联网工业设备控制网关。
评测计划:
1. 通过正点原子开发板资料和视频PPT资料,了解STM32H7R3开发套件的功能。
2. 接入Air780E,实现开发板通过4G联网
3. 对接FastBee物联网平台,实现数据上报和命令下发
4. 移植OTA功能,实现在线OTA升级
5. 通过物联网平台,采集传感器数据,并控制实际的外设,实现一款工业设备控制网关
在之前一篇帖子中,有 开发套件开箱报告。
评测和实现的过程,将会逐步分享。
正点原子STM32H7R3开发套件 上,提供的板载设备很多:
但玩板子的第一件事,就是点灯。
从上图可以得知,用户LED有两颗,可以做跑马灯,交互点亮。
从官方手册页可以得知用户LED的具体硬件原理图:
在官方的例程中,也提供了跑马灯的演示代码。不过这么简单的事情,就自己做一下吧。
1、先在STM32CubeIDE中,创建一个STM32H7R3L8H6H的工程:
2、设置GPIO,开启用户LED
参考原理图,LED0对应GPIO PD14,LED1对应GPIO PC0。
3、编写LED开启和关闭的快捷调用
可以参考官方提供的示例代码,也可以自己写,比较简单:
/* Private defines -----------------------------------------------------------*/
#define LED1_Pin GPIO_PIN_0
#define LED1_GPIO_Port GPIOC
#define LED0_Pin GPIO_PIN_14
#define LED0_GPIO_Port GPIOD
/* USER CODE BEGIN Private defines */
/* IO操作 */
#define LED0(x) do { (x) ? \\\\ HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET): \\\\
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET); \\\\
} while (0)
#define LED1(x) do { (x) ? \\\\ HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET): \\\\
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); \\\\
} while (0)
#define LED0_TOGGLE() do { HAL_GPIO_TogglePin(LED0_GPIO_PORT, LED0_GPIO_PIN); } while (0)
#define LED1_TOGGLE() do { HAL_GPIO_TogglePin(LED1_GPIO_PORT, LED1_GPIO_PIN); } while (0)
/* USER CODE END Private defines */
4、在main中控制LED
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
LED0(0); /* 开启LED0 */
LED1(1); /* 关闭LED1 */
HAL_Delay(500); /* 延时500毫秒 */
LED0(1); /* 关闭LED0 */
LED1(0); /* 开启LED1 */
HAL_Delay(500); /* 延时500毫秒 */
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
5、编译
编写完成后,直接编译即可:
如果编译时,出现-fcyclomatic-completxity,可以在如下的项目设置中取消对应的选项:
6、运行
在调试配置中,添加对应的运行配置,并设置好调试器的类型:
后面有机会,会使用STLink、DAPLink、J-Link等多种调试器测试。
然后使用该运行配置运行或者调试即可:
7、运行效果
直接看视频:
从手册可以得知,STM32H7R3提供了丰富的定时器功能:
这篇测试,就使用TIM14,来做PWM输出,控制LED呈现呼吸灯效果。
1、定时器TIM14设置
从手册可以得知,TIM14挂在AHB2上:
从MX设置中,可以的之具体的时钟频率:
要实现PWM输出,可以试用如下的公式进行计算:(参考:STM32H7系列教程(4)脉冲宽度调制(PWM)_stm32h7 pwm)
Fpwm =Tclk / ((arr+1)*(psc+1))(单位:Hz)
arr 是计数器值
psc 是预分频值
根据时钟频率,具体结果如下:
时钟频率设置为Tclk=300MHZ
自动装载值为ARR=499
设置预分频系数PSC=299
pwm频率=300000000/(500*300)=2kHz
占空比设置成50%,将获得一个1KHz的频率
根据上面的计算结果,设置TIM14如下:
需要注意正点原子STM32H7R3开发套件的板载LED,低电平点亮,所以需要将CH Polarity设置为LOW。
2、调用代码
在main.c中,适当的位置添加对应的代码:
/* USER CODE BEGIN PV */
uint16_t pwmval=0; //PWM占空比
/* USER CODE END PV */
/* USER CODE BEGIN 2 */
// LED0(1); /* 开启LED0 */
LED1(1); /* 关闭LED1 */
HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1); //开启PWM对应的通道
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
for(pwmval=0;pwmval<=400;pwmval++)
{
__HAL_TIM_SetCompare(&htim14, TIM_CHANNEL_1, pwmval); //修改占空比
HAL_Delay(1);
}
HAL_Delay(200);
for(pwmval=400;pwmval>0;pwmval--)
{
__HAL_TIM_SetCompare(&htim14, TIM_CHANNEL_1, pwmval); //修改占空比
HAL_Delay(1);
}
HAL_Delay(200);
#endif
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
修改完成后,保存编译。
3、运行效果
实际运行前,需要将PD14和PF9连接,以便PWM输出控制LED0:
最终,实际的运行效果如下:
更多回帖