在最小库函数模板上开发。
方法步骤:
1、串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
2、GPIO端口模式设置:GPIO_Init();
3、串口参数初始化:USART_Init();
4、开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
5、使能串口:USART_Cmd();
6、编写中断处理函数
7、串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
8、串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
main.c
#include "stm32f10x.h"
void My_USART1(void)
{
GPIO_InitTypeDef GPIO_InitStrue;
USART_InitTypeDef USART1_InitStrue;
NVIC_InitTypeDef NVIC_InitStrue;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//打开GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//打开USART1时钟
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;//上拉输入
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;//第九引脚
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz; //输出速度配置
GPIO_Init(GPIOA,&GPIO_InitStrue);//将配置数据写入寄存器
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;//第10引脚
//GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;//由于是输入,不需要配置速度
GPIO_Init(GPIOA,&GPIO_InitStrue);//将配置数据写入寄存器
USART1_InitStrue.USART_BaudRate=115200;//配置波特率
USART1_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//配置硬件流,这里设置无
USART1_InitStrue.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//模式为允许输入和输出
USART1_InitStrue.USART_Parity=USART_Parity_No;//不设置奇偶校验位
USART1_InitStrue.USART_StopBits=USART_StopBits_1;//配置停止位为1位
USART1_InitStrue.USART_WordLength=USART_WordLength_8b;//配置传输的字长
USART_Init(USART1,&USART1_InitStrue); //将串口相关数据写入寄存器
USART_Cmd(USART1,ENABLE); //使能寄存器
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//接收中断
NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStrue);
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
My_USART1();
while(1);
}
void USART1_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
res=USART_ReceiveData(USART1);
USART_SendData(USART1,res);
}
}
单片机 | USB—TTL转换器 |
---|---|
+3.3v | +3.3V |
GND | GND |
PA10 | TXD |
PA9 | RXD |
实验现象!