硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode
1 新建cubemax工程
1.1 配置系统时钟RCC
1.2 配置定时器
选择通用定时器TIM2
,时钟源选择ETR2
,对应的输入端口为PA0
引脚,预分频系数为0
,重装载值选择默认最大值,避免溢出
1.3 配置信号输出端口
选择PA1
引脚作为信号输出端口,选择输出模式GPIO_Output
,自定义标签为OUT_SIGN
,其他设置默认即可
1.4 配置串口
并在keil中的魔术棒界面开启微库
2 代码
2.1 printf重定向
在usart.h
引用头文件和函数声明
c
#include "stdio.h"
int fputc(int ch,FILE *f);
在usart.c
中重定向
c
//重定向printf
int fputc(int ch,FILE *f)
{
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart2,temp,1,2);
return ch;
}
2.2 main函数
c
int main(void)
{
/* USER CODE BEGIN 1 */
uint32_t count;
/* 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_TIM2_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim2); /*开启定时器2,用于外部计数*/
printf("TIMER IS OK!\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(OUT_SIGN_GPIO_Port,OUT_SIGN_Pin); /*每隔500ms翻转一次LED*/
HAL_Delay(500);
count=__HAL_TIM_GET_COUNTER(&htim2); /*读取计数值*/
printf("计数值:%d\n",count); /*输出结果*/
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
3 实验现象
用杜邦线连接PA0
和PA1
引脚,观察串口输出结果