#include "stm32f10x.h"
/*
引脚说明:
PA2 USART_TX
PA3 USART_RX
*/
/// @brief 初始化串口2
/// @param baud
void usart_int(uint32_t baud)
{
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// /* 初始化硬件时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* GPIOA时钟 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
/*复位串口2 */
USART_DeInit(USART2);
/* GPIO初始化 */
/* USART2_TX PA.2 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; /* PA.2 */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /*复用推挽输出 */
GPIO_Init(GPIOA, &GPIO_InitStructure); /* 初始化PA2 */
/* USART2_RX PA.3 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /* 浮空输入 */
GPIO_Init(GPIOA, &GPIO_InitStructure); /* 初始化PA3 */
USART_InitStructure.USART_BaudRate = baud; /* 一般设置为9600; */
USART_InitStructure.USART_WordLength = USART_WordLength_8b; /* 字长为8位数据格式 */
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_Rx | USART_Mode_Tx; /* 收发模式 */
USART_Init(USART2, &USART_InitStructure); /* 初始化串口 2 */
/*
* 波特率设置
* USART2->BRR=(pclk1*1000000)/(bound);// 波特率设置
* USART2->CR1|=0X200C; //1位停止,无校验位.
*/
USART_Cmd(USART2, ENABLE); /* 使能串口 */
/* 使能接收中断 */
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); /* 开启中断 */
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; // 中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; /* 抢占优先级3 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; /* 子优先级3 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /* IRQ通道使能 */
NVIC_Init(&NVIC_InitStructure); /* 根据指定的参数初始化VIC寄存器 */
}
/* 定义用于存放消息的缓冲区 */
extern u8 data;
/// @brief 中断服务函数
/// @param
void USART2_IRQHandler(void)
{
if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) /* 接收到数据 */
{
/* 接收消息 */
data = USART_ReceiveData(USART2);
/* 判断灯光状态 */
if (data == 'a')
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
else if (data == 'A')
GPIO_SetBits(GPIOA, GPIO_Pin_0);
/* 消息回弹 */
USART_SendData(USART2, data);
while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
; //
/* 清空标志位 */
USART_ClearITPendingBit(USART2, USART_FLAG_RXNE);
}
}
STM32f103c8t6 串口 蓝牙控制LED
最新推荐文章于 2024-07-26 01:20:34 发布