stm32f103c8t6智能小车寄存器
时间: 2025-03-06 10:41:42 浏览: 48
### STM32F103C8T6 智能小车开发中的寄存器配置及使用
#### 1. GPIO 配置
为了使STM32F103C8T6能够控制外部设备,如电机控制器TB6612和传感器模块,GPIO端口初始化至关重要。通过设置相应的寄存器来定义引脚的功能模式。
- **GPIOx_CRL/CRH (Control Register Low/High)** 控制每个引脚的工作方式,包括输入、输出及其具体参数。
```c
// 设置PA0为推挽输出模式,最大速度50MHz
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
```
#### 2. TIM 定时器配置
定时器TIM用于生成PWM信号以调节电机转速。这涉及到多个寄存器的操作:
- **TIMx_CR1 (Counter Enable Bit)** 启动计数器操作。
- **TIMx_ARR (Auto Reload Register)** 设定自动重装载值决定周期长度。
- **TIMx_CCRx (Capture Compare Register)** 存储比较值即占空比大小。
```c
// 初始化TIM2 PWM通道1(PA0),频率72Mhz,预分频系数=72-1,
// 计数值范围(ARR)=999,CCR1初始值设为499代表50%占空比.
void TIM2_PWM_Init(u16 arr,u16 psc){
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 ,ENABLE );
TIM_TimeBaseStructure.TIM_Period =arr ;
TIM_TimeBaseStructure.TIM_Prescaler =psc ;
TIM_TimeBaseStructure.TIM_ClockDivision =0 ;
TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up ;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM1 ;
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable ;
TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High ;
TIM_OCInitStructure.TIM_Pulse =(u16)(arr>>1); // 初始占空比50%
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable );
TIM_Cmd(TIM2,ENABLE );
}
```
#### 3. USART 配置
对于带有蓝牙通信功能的小车来说,USART接口允许MCU与其他串行外设交换数据。主要涉及如下几个重要寄存器:
- **USART_SR (Status Register)** 反映当前状态标志位。
- **USART_DR (Data Register)** 发送或接收的数据缓冲区。
- **USART_BRR (Baud Rate Register)** 波特率设定。
```c
// 初始化USART1波特率为115200bps
void UART_Configuration(void)
{
USART_InitTypeDef USART_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
/* 使能相关时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
/* 配置TX/RX引脚 */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
/* 配置USART参数 */
USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStruct);
/* 使能USART */
USART_Cmd(USART1, ENABLE);
}
```
以上代码片段展示了如何利用特定的寄存器完成基本硬件资源分配与初始化工作[^1]。这些基础之上才能进一步构建更复杂的应用逻辑,比如实现智能避障等功能。
阅读全文
相关推荐


















