一、点亮一个led灯
软件编程常以输出”Hello World”作为学习的开始,在嵌入式的开发中我们也常使用点亮一个流水灯的方式开始学习,但是基于板载的资源比较少,Nucleo开发板上只有一个绿色的led灯,我们这里以点亮这个led灯为例进行第一个程序的开发。首先Cube的配置见下图,就是初始化配置未作修改。
在while(1)中输入代码
HAL_GPIO_TogglePin(GPIOA,LD4_Pin);
HAL_Delay(1000);
绿色led灯将每一秒进行闪烁编译通过后下载即可演示视频如下
2cb61de732ea018baecfe9bf6b2de912
二、oled模块测试
oled是编程常用的直观的显示模块这里我们分布介绍一下在STM32L452RE上使用I2C进行oled配置,首先Cube的配置见下图
生成底层后我们还需要引入oled.c,oled.h,oledfont.h三个文件,经常进行开发的小伙伴对他们一定很熟悉这里就不做过多赘述,我使用的是四引脚的oled屏幕将GND接地VCC接3.3V,这里配置的是I2C2通道所以SCL接PB10,SDA接PB11,接好后编写了一段测试代码进行测试
int main(void)
{
/* USER CODE BEGIN 1 */
u8 t=0;
/* 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_USART2_UART_Init();
MX_I2C2_Init();
/* USER CODE BEGIN 2 */
OLED_Init();
OLED_ShowString(0,0,"STM32L452",24);
OLED_ShowString(0,24, "0.96' OLED TEST",16);
OLED_ShowString(0,40,"ATOM 2023/9/17",12);
OLED_ShowString(0,52,"ASCII:",12);
OLED_ShowString(64,52,"CODE:",12);
OLED_Refresh_Gram();
t=' ';
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
OLED_ShowChar(36,52,t,12);
OLED_ShowNum(94,52,t,3,12);
OLED_Refresh_Gram();
t++;
if(t>'~')t=' ';
HAL_Delay(500);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
测试结果如下
这里需要补充说明的是使用I2C不同通道对输出引脚有所改变,STM32L452RE可配置四个I2C其中I2C1对应PA9、PA10,I2C2对应PB10、PB11、I2C3对应PC0、PC1 、I2C3对应PB6、PB7。配置好后在找到对应的引脚,在板上引脚标注不全具体可参考下图。