本文最后更新于 767 天前,其中的信息可能已经有所发展或是发生改变。
本讲的主要内容:
- 环境的配置:STM32CUBEMX & MDK
- 时钟
- 如何编译/烧录程序
- 常用GPIO函数:
- HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,SET)
- HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1)
- HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)
Homework:
Code:(main.c核心代码)
基础作业:
//初始化后LED亮灭1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_Delay(1000);
//按键识别部分
while (1)
{
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)==0) //消抖
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)==0)
{
break;
}
}
}
//LED控制
//亮灭交替,周期1s
while(1)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
HAL_Delay(500);
}
附加题1:
//LED控制
while(1)
{
for(int LED_ON_PERIOD=100;LED_ON_PERIOD>=1;LED_ON_PERIOD--)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
HAL_Delay(LED_ON_PERIOD/2);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_Delay(LED_ON_PERIOD/2);
}
for(int LED_ON_PERIOD=1;LED_ON_PERIOD<=100;LED_ON_PERIOD++)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
HAL_Delay(LED_ON_PERIOD/2);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_Delay(LED_ON_PERIOD/2);
}
}
附加题2:
//LED控制
while(1)
{
for(int LED_ON_PERIOD = 1 ; LED_ON_PERIOD <=50 ; LED_ON_PERIOD++)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
HAL_Delay(LED_ON_PERIOD);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_Delay(50-LED_ON_PERIOD);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
HAL_Delay(LED_ON_PERIOD);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_Delay(50-LED_ON_PERIOD);
}
for(int LED_ON_PERIOD = 50 ; LED_ON_PERIOD >=1 ; LED_ON_PERIOD--)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
HAL_Delay(LED_ON_PERIOD);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_Delay(50-LED_ON_PERIOD);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
HAL_Delay(LED_ON_PERIOD);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_Delay(50-LED_ON_PERIOD);
}
}