请你写个STM32F103C8T6的C语言代码 串口波特率38400,APB频率36M,CAN波特率500K
时间: 2024-12-08 18:22:30 浏览: 17
在STM32F103C8T6单片机上设置串口波特率38400、APB主频36MHz以及CAN波特率500K,首先需要配置GPIO用于串口TX和RX引脚,然后初始化USART和CAN控制器。以下是一个简单的示例代码,假设已知USART1用于串口通信:
```c
#include "stm32f10x.h"
// USART1 GPIO配置
void USART1_GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); // 启动GPIOA和USART1时钟
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); // RX (PA9)
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); // TX (PA10)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // Push Pull Output
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
// USART1 初始化
void USART1_Init(void) {
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 启动USART1时钟
USART_InitStructure.USART_BaudRate = 38400; // 波特率设置为38400
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 开启接收就绪中断
NVIC_EnableIRQ(USART1_IRQn); // 开启中断请求
}
// CAN初始化
void CAN_Init(void) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); // 启动CAN1时钟
CAN_DeInit(CAN1); // 清除CAN模块寄存器
CAN_InitStructure.CAN_TransferType = CAN_TransferNormal;
CAN_InitStructure.CAN_Mode = CAN_Mode_NORMAL;
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; // 空闲滤波时间1TQ
CAN_InitStructure.CAN_BS1 = CAN_BS1_11tq; // 滤波系数11TQ
CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq; // 滤波系数5TQ
CAN_InitStructure.CAN_TTCM = DISABLE; // 不使用自动拓扑识别
CAN_InitStructure.CAN_ABRP = 0; // 自适应波特率发生器关闭
CAN_InitStructure.CAN_MODE2 = DISABLE; // 模式2禁用
CAN_Init(CAN1, &CAN_InitStructure);
CAN_SetPrescaler(CAN1, 2); // 设置波特率寄存器值为2,即36MHz / (16 * 2) = 500Kbps
CAN_ConfigBitrate(CAN1, 500000); // 设置实际波特率为500Kbps
}
// 主函数
int main(void) {
USART1_GPIO_Init();
USART1_Init();
CAN_Init();
while (1) {
// 这里可以添加一些其他功能代码
}
}
阅读全文