基于STM32F103C8T6微控制器简单项目实例

使用LCD显示屏显示信息、通过按键进行用户输入、以及使用串行通信(UART)发送数据到外部设备。以下是一个综合示例:

硬件需求

  • STM32F103C8T6微控制器开发板
  • 16x2 LCD显示屏模块
  • 按键
  • UART通信接口(例如通过串口连接电脑)
  • USB转串口线
  • 限流电阻 (例如220Ω) 和排阻

软件工具

  • STM32CubeIDE 或其他支持STM32的IDE
  • CMSIS库文件
  • ST-LINK驱动和编程器(如果使用ST-LINK)

开发步骤

1. 创建新的工程
  • 在STM32CubeIDE中创建一个新的STM32F103C8T6项目。
  • 选择合适的外设配置,例如GPIO、USART、I2C或SPI(用于LCD)。
2. 配置外设
  • GPIO:配置用于LCD、按键和UART的GPIO引脚。
  • USART:配置用于串行通信的USART引脚。
  • LCD:根据LCD模块类型选择I2C或SPI接口配置。
3. 编写代码
 

c

深色版本

1#include "stm32f1xx_hal.h"
2#include "lcd.h" // 假设这是一个LCD驱动库
3
4// 定义常量和变量
5#define KEY_PIN GPIO_PIN_0
6#define KEY_GPIO_PORT GPIOA
7#define UART_TX_PIN GPIO_PIN_2
8#define UART_RX_PIN GPIO_PIN_3
9#define UART_GPIO_PORT GPIOA
10#define UART_INSTANCE USART2
11
12// 初始化LCD
13void LCD_Init(void);
14
15// 初始化按键
16void Key_Init(void);
17
18// 初始化USART
19void UART_Init(void);
20
21// 按键检测函数
22uint8_t Key_GetState(void);
23
24int main(void)
25{
26    HAL_Init(); // 初始化HAL库
27
28    // 初始化GPIO时钟
29    __HAL_RCC_GPIOA_CLK_ENABLE();
30    __HAL_RCC_USART2_CLK_ENABLE();
31
32    // 初始化LCD
33    LCD_Init();
34
35    // 初始化按键
36    Key_Init();
37
38    // 初始化USART
39    UART_Init();
40
41    while (1)
42    {
43        if (Key_GetState())
44        {
45            // 当按键被按下时,发送消息到串口并更新LCD
46            char message[] = "Button Pressed!";
47            LCD_Clear();
48            LCD_GotoXY(0, 0);
49            LCD_Puts(message);
50            HAL_UART_Transmit(&huart2, (uint8_t*)message, sizeof(message), HAL_MAX_DELAY);
51        }
52
53        // 循环延时以避免高CPU占用率
54        HAL_Delay(100);
55    }
56}
57
58// 初始化LCD
59void LCD_Init(void)
60{
61    // 初始化LCD驱动函数
62    // 这里省略具体的初始化代码
63}
64
65// 初始化按键
66void Key_Init(void)
67{
68    GPIO_InitTypeDef GPIO_InitStruct = {0};
69    
70    GPIO_InitStruct.Pin = KEY_PIN;
71    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
72    GPIO_InitStruct.Pull = GPIO_PULLUP;
73    HAL_GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStruct);
74}
75
76// 初始化USART
77void UART_Init(void)
78{
79    GPIO_InitTypeDef GPIO_InitStruct = {0};
80    USART_InitTypeDef huart2;
81
82    // 配置USART GPIO
83    GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN;
84    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
85    GPIO_InitStruct.Pull = GPIO_NOPULL;
86    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
87    GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
88    HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct);
89
90    // 配置USART
91    huart2.Instance = UART_INSTANCE;
92    huart2.Init.BaudRate = 9600;
93    huart2.Init.WordLength = UART_WORDLENGTH_8B;
94    huart2.Init.StopBits = UART_STOPBITS_1;
95    huart2.Init.Parity = UART_PARITY_NONE;
96    huart2.Init.Mode = UART_MODE_TX_RX;
97    huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
98    huart2.Init.OverSampling = UART_OVERSAMPLING_16;
99    HAL_UART_Init(&huart2);
100}
101
102// 按键检测函数
103uint8_t Key_GetState(void)
104{
105    return HAL_GPIO_ReadPin(KEY_GPIO_PORT, KEY_PIN);
106}
4. 编译和下载
  • 使用STM32CubeIDE编译代码。
  • 通过USB线或者ST-LINK将程序下载到STM32F103C8T6开发板上。
5. 测试
  • 观察LCD显示屏是否正确显示信息。
  • 使用串口调试助手软件检查是否能够接收到正确的串口数据。
  • 检查按键是否能正确触发LCD显示和串口数据发送。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蘑菇二号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值