1.说在前面:
清明三天小假期,放松一下无可厚非,但是,依旧要完成自己的学习任务
2.串口通信的简单介绍:
1.将串口作为一个沟通的渠道,可以和外界进行接收和发送信号
2.STM32和串口相关的寄存器:
2-1:USART_SR(状态寄存器):存储着MCU的一些状态
2-2:USART_DR(数据寄存器):暂存着一些数据信息
2-3:USART_BRR(波特率寄存器:暂存波特率信息
2-4:USART_CRI(控制寄存器):用于给usart进行使能
3.注:波特率的计算方法:
只要给出相应的时钟频率和设置usartdiv,就可以计算出波特率
3.串口通讯的简单配置和使用
1.其实基于库函数而言:需要有一个理顺的思路,知道每一步需要做什么,然后去寻找相应的库函数
2.怎样实现串口通讯呢?
1.串口时钟和GPIO时钟使能
2.串口复位(不必须)
3.GPIO设置:注意rxd和txd在设置过程中设置输入输出方法的不同(AF_PP|IN_FLOATING)
4.串口参数初始化(这里面要初始化蛮多参数的,但是要记住每个参数的设定,通信双方要约定参数一致)
5.开启中断,使能 NVIC
6.实现串口的使能
7.编写中断处理函数
8.实现串口数据的收发
9.实现串口传输状态获取
#include"stm32f10x.h"
void my_USART_Init()
{
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
//1.时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//ENABLE THE GPIOA
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//ENABLE THE USART1
//2.GPIOA9 init
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复位推挽输出
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9 ;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
//2.GPIOA10 init
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
//3.usart init
USART_InitStruct.USART_BaudRate=115200;//设置波特率
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//设置硬件流设置
USART_InitStruct.USART_Mode= USART_Mode_Rx | USART_Mode_Tx;//设置模式
USART_InitStruct.USART_Parity=USART_Parity_No;//不采用奇偶校验
USART_InitStruct.USART_StopBits=USART_StopBits_1;//1位停止位
USART_InitStruct.USART_WordLength=USART_WordLength_8b;//8位数据位
USART_Init(USART1,&USART_InitStruct);
//初始化某串口
USART_Cmd(USART1,ENABLE);//´串口使能
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//实现中断
//中断优先级
NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStruct);
}
//中断处理函数
void USART1_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE))//ÅжÏÖжÏģʽ
{
res= USART_ReceiveData(USART1);
USART_SendData(USART1,res);
}
}
int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级
my_USART_Init();
while(1);
}
上一篇:stm32与绝对式编码器的ssi接口进行通信
下一篇:Stm32 iic初始化介绍
推荐阅读最新更新时间:2024-11-07 21:42