stm32f103 输出方波互补波形
当时遇到一个棘手的难题,串口有时接受不到数据
因为定义的问题
void Usart1_init() {
uint32_t usart_tx_rcu = RCC_APB2Periph_GPIOA;
GPIO_TypeDef * usart_tx_port = GPIOA;
uint32_t usart_tx_pin = GPIO_Pin_9;
uint32_t usart_rx_rcu = RCC_APB2Periph_GPIOA;
GPIO_TypeDef * usart_rx_port = GPIOA;
uint32_t usart_rx_pin = GPIO_Pin_10;
uint32_t usart_rcu = RCC_APB2Periph_USART1;
USART_TypeDef * usart = USART1;
uint32_t usart_irq = USART1_IRQn;
uint32_t usart_param_baudrate = 115200;
GPIO_InitTypeDef GPIO_InitStructure;
// 1. 开启时钟
RCC_APB2PeriphClockCmd(usart_tx_rcu, ENABLE);
GPIO_StructInit(&GPIO_InitStructure);
// 2. 配置 PA10 (RX) 为复用推挽输出
GPIO_InitStructure.GPIO_Pin = usart_tx_pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //发送引脚必须是输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); //103 芯片用PinRemapConfig 替代PinAFConfig
GPIO_Init(usart_tx_port, &GPIO_InitStructure);
// 1. 开启时钟
RCC_APB2PeriphClockCmd(usart_rx_rcu, ENABLE);
GPIO_StructInit(&GPIO_InitStructure);
// 2. 配置 PA10 (RX) 为浮空输入 (IN_FLOATING)
GPIO_InitStructure.GPIO_Pin = usart_rx_pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 接收引脚必须是输入 GPIO_Mode_IN_FLOATING
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); //103 芯片用PinRemapConfig 替代PinAFConfig
GPIO_Init(usart_rx_port, &GPIO_InitStructure);
//串口初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_DeInit(usart);
USART_InitTypeDef param;
USART_StructInit(¶m); //here give all default value to struct
param.USART_BaudRate = usart_param_baudrate;
USART_Init(usart, ¶m);
//通过中断进行接收
//接收中断配置
NVIC_InitTypeDef nvic;
nvic.NVIC_IRQChannel = usart_irq;
nvic.NVIC_IRQChannelPreemptionPriority = 2;
nvic.NVIC_IRQChannelSubPriority = 2;
nvic.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic);
//开启中断
USART_ITConfig(usart, USART_IT_RXNE, ENABLE);
USART_ITConfig(usart, USART_IT_IDLE, ENABLE);
USART_Cmd(usart, ENABLE); //ENABLE Usart
}

浙公网安备 33010602011771号