stm32f1系列(二)串口通信

今天学习了很多东西,主要就是一些stm32f1系列的时钟,优先级还有就是串口通信,如今主要贴的代码是一个很简单的串口通信的代码,可是却蕴含着今天一成天学习的东西。
#include<stm32f10x.h>web

void MY_USART1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;异步

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);	

USART_InitStructure.USART_BaudRate=115200;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_InitStructure);svg

USART_Cmd(USART1,ENABLE);

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStructure);

}函数

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_USART1_Init();
while(1);
}设计

在这个里面主要是对串口1进行初始化以及对串口1中断初始化设计。
对于初始化主要有RCC_APB2PeriphClockCmd(),主要是对USART1以及GPIOA的使能;GPIO_Init()是对PA9和PA10进行模式设置,对于PA9而言,GPIO_Mode_AF_PP是复用推挽输出,对于PA10而言是GPIO_Mode_IN_FLOATING浮空输入,这些主要仍是要查USART1的表,因为是异步通信全双工工做方式下,因此对于输入为浮空输入或者上拉输入,对于输出是复用推挽输出;USART_Init()是对USART1串口1进行初始化,主要包括波特率(BaudRate),USART1的输入输出模式(USART_Mode),是否设置奇偶校验位(USART_Parity),中止位的个数设置(USART_StopBits),以及字长(USART_WordLength),这些也是很重要的,由于到后面调试的时候也须要这些数据;USART_Cmd()使能USART1的;USART_ITConfig()这个是对USART1的中断使能;NVIC_Init()是设置中断优先级,可是因为本次的中断只用到串口1因此对于抢占优先级(NVIC_IRQChannelPreemptionPriority)以及响应优先级(NVIC_IRQChannelSubPriority)的参数设置很随意;USART1_IRQHandler()USART1的中断函数;NVIC_PriorityGroupConfig()中断分组,本次是组号为2因此有2位抢占优先级和2位响应优先级。调试

本次结束。开心,第一次堆了很长的字。code