当前位置:互联智慧 >Q&A > PCBA百科 >  

单片机编程代码大全

时间:2025-03-02 13:49:08 来源:PCBA 点击:0

目录

1. 常用外设编程

单片机编程代码大全

  • GPIO
  • 初始化、配置和读写
  • 中断处理
  • 定时器
  • 初始化、配置和使用
  • PWM 输出
  • 捕获输入
  • 串口通信
  • 初始化、配置和收发数据
  • 中断处理
  • I2C 通信
  • 初始化、配置和读写
  • 中断处理
  • SPI 通信
  • 初始化、配置和读写
  • 中断处理
  • ADC
  • 初始化、配置和测量
  • 中断处理
  • DAC
  • 初始化、配置和输出
  • 中断处理

2. 进阶编程

  • 中断处理
  • 中断向量表
  • 中断优先级
  • 中断服务函数
  • 实时操作系统
  • 任务创建和调度
  • 同步和互斥
  • 消息传递
  • 文件系统
  • 初始化、读写和管理文件
  • FAT32 文件系统
  • 网络通信
  • TCP/IP 协议栈
  • 以太网接口
  • 无线通信

3. 应用实例

  • LED 控制
  • 按键输入
  • 传感器读取
  • 电机控制
  • LCD 显示
  • 蓝牙通信
  • 物联网应用

具体代码示例(以 ARM Cortex-M0+ 为例)

GPIO 初始化

```c

void GPIO_Init(void) {

// 设置 GPIOC 第 13 引脚为输出模式

RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 使能 GPIOC 时钟

GPIOC->CRH &= ~(GPIO_CRH_MODE13); // 清除模式位

GPIOC->CRH |= GPIO_CRH_MODE13_0; // 设置为输出模式

}

```

定时器定时

```c

void Timer_Init(void) {

TIM2->CR1 &= ~TIM_CR1_CEN; // 禁用定时器

TIM2->PSC = 8000 - 1; // 预分频系数为 8000,时钟源为 16 MHz

TIM2->ARR = 10000 - 1; // 自动重装载寄存器值为 10000,定时周期为 1 秒

TIM2->CR1 |= TIM_CR1_CEN; // 启用定时器

}

```

UART 通信

```c

void UART_Init(void) {

// 使能 UART 时钟和 GPIO 时钟

RCC->APB1ENR1 |= RCC_APB1ENR1_UART4EN;

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

// 设置 GPIO 引脚为 UART 功能

GPIOA->CRH &= ~(GPIO_CRH_MODE9);

GPIOA->CRH |= GPIO_CRH_MODE9_1;

GPIOA->CRH &= ~(GPIO_CRH_CNF9);

GPIOA->CRH |= GPIO_CRH_CNF9_1;

// 配置 UART 参数

UART4->BRR = 115200; // 波特率为 115200

UART4->CR1 |= UART_CR1_UE; // 启用 UART

}

```

ADC 测量

```c

void ADC_Init(void) {

// 使能 ADC 时钟和 GPIO 时钟

RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

// 设置 GPIO 引脚为模拟输入

GPIOA->CRL &= ~(GPIO_CRL_MODE0);

GPIOA->CRL |= GPIO_CRL_MODE0_1;

// 配置 ADC 参数

ADC1->CR2 &= ~ADC_CR2_ADON; // 禁用 ADC

ADC1->CR1 |= ADC_CR1_EOCIE; // 启用转换完成中断

ADC1->CR2 |= ADC_CR2_EXTTRIG; // 使用外部触发

ADC1->CR2 |= ADC_CR2_EXTSEL_1; // 触发源为软件触发

ADC1->SMPR2 |= ADC_SMPR2_SMP0_0; // 采样时间为 55.5 周期

ADC1->CR2 |= ADC_CR2_ADON; // 启用 ADC

}

```