一、初始STM32
二、学习步骤
(1)、学习过程中遇到的问题:
、 ①使用J-link下载调试程序时,Keil找不到设备。
答:可能是下载器出现了问题,之后在淘宝上购买了ST-LINK,连接成功,嘻嘻。
(2)、代码::由于使用STM32CubeMX创建led工程,所以相应串口初始化工作由CubeMX完成,在此不再贴出,以下是点亮led灯的相应代码:
main.c:
#include "main.h"
#include "gpio.h"
void SystemClock_Config(void);
int main()
{
while(1)
{
HAL_GPIO_WritePin(GPIOB, U1U_Pin, GPIO_PIN_RESET);//继电器
RGB_Heart();
}
}
gpio.c:
void RunLed(void)
{
HAL_GPIO_WritePin(RunLed_GPIO_Port, RunLed_Pin, GPIO_PIN_RESET);
HAL_Delay(1000);
HAL_GPIO_WritePin(RunLed_GPIO_Port, RunLed_Pin, GPIO_PIN_SET);
}
void RGB_led(uint8_t LEDX,uint8_t status)
{
if(status == ON)
{
switch(LEDX)
{
case BLUE_LED:
HAL_GPIO_WritePin(GPIOB, BlueLed_Pin, GPIO_PIN_RESET);
break;
case RED_LED:
HAL_GPIO_WritePin(GPIOB, RedLed_Pin, GPIO_PIN_RESET);
break;
case GREE_LED:
HAL_GPIO_WritePin(GPIOB, GreeLed_Pin, GPIO_PIN_RESET);
break;
}
}
if(status == OFF)
{
switch(LEDX)
{
case BLUE_LED:
HAL_GPIO_WritePin(GPIOB, BlueLed_Pin, GPIO_PIN_SET);
break;
case RED_LED:
HAL_GPIO_WritePin(GPIOB, RedLed_Pin, GPIO_PIN_SET);
break;
case GREE_LED:
HAL_GPIO_WritePin(GPIOB, GreeLed_Pin, GPIO_PIN_SET);
break;
}
}
}
void RGB_Heart(void)
{
RunLed();
RGB_led(BLUE_LED,ON);
HAL_Delay(1000);
RGB_led(BLUE_LED,OFF);
RunLed();
RGB_led(GREE_LED,ON);
HAL_Delay(1000);
RGB_led(GREE_LED,OFF);
RunLed();
RGB_led(RED_LED,ON);
HAL_Delay(1000);
RGB_led(RED_LED,OFF);
}
(3)、现象
LED灯蓝、绿、红交替出现。
2、串口通信学习与printf实现
(1)、串口用到9个pin:
Pin Name Dir Description
1 CD Carrier Detect :数据载波检测 DCD 8 数据载波检测 DCD
2 RXD Receive Data(常用): 接收数据 RXD 3 接收数据 RXD
3 TXD Transmit Data(常用):发送数据 TXD 2 发送数据 TXD
4 DTR Data Terminal Ready:数据终端准备 DTR 20 数据终端准备 DTR
5 GND System Ground(常用):信号地 GND 7 信号地 GND
6 DSR Data Set Ready:数据设备准备好DSR 6 数据设备准备好 DSR
7 RTS Request to Send:请求发送 RTS 4 请求发送 RTS
8 CTS Clear to Send:清除发送 CTS 5 清除发送 CTS
9 RI Ring Indicator:振铃指示 RI 22 振铃指示 RI
(2)、实现代码:
注意:串口以字符串的形式传输数据。
ustart.c:
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF); //输出打印至串口
return ch;
}`
main.c:
while (1)
{
printf("stm32L433TB6 trance debug.........\r\n");
}
3、按键控制LED灯
中断按键进而控制led:
第一步:CubeMX配置控制led的gpio和控制按键的gpio;
第二步:打开配置好的工程,找到中断服务函数,之后再找到处理相应中断的回调函数,进行重新编写即可;