stm32f103c8t6裸板初始化代码
时间: 2024-05-09 09:13:22 浏览: 106
STM32F103C8T6是一款32位ARM Cortex-M3内核的微控制器,其裸板初始化代码包括以下几个方面:
1. 系统时钟初始化:根据需要选择内部RC振荡器或外部晶振,并设置时钟分频系数。
2. 中断向量表:将中断向量表地址设置为程序存储器中的起始地址。
3. GPIO初始化:设置GPIO的输入输出方向、推挽或开漏输出、上下拉电阻等参数。
4. 定时器初始化:配置定时器的计数模式、预分频系数、计数周期、定时器中断等参数。
5. 串口初始化:配置串口的波特率、数据位、停止位、校验位、发送接收缓存区等参数。
6. ADC初始化:配置ADC的采样通道、采样周期、参考电压、ADC中断等参数。
下面是一个简单的示例代码:
```
#include "stm32f10x.h"
int main(void)
{
// 系统时钟初始化
RCC_DeInit(); // 复位RCC寄存器
RCC_HSEConfig(RCC_HSE_ON); // 使能外部高速晶振
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // PLL时钟源选择外部晶振,倍频系数为9
RCC_PLLCmd(ENABLE); // 使能PLL
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // 等待PLL稳定
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // 选择PLL作为系统时钟源
while (RCC_GetSYSCLKSource() != 0x08); // 等待PLL作为系统时钟源
// 中断向量表
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);
// GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 定时器初始化
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 7199;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 串口初始化
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
// ADC初始化
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
while (1)
{
// 程序主循环
// ...
}
}
```
阅读全文