码迷,mamicode.com
首页 > 其他好文 > 详细

UART 串口相关库函数

时间:2015-07-31 10:31:37      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

先把一般使用时候用到的几个串口库函数列出来。

以下是串口初始化的一个参考函数:

void uart_init(u32 bound){
   
    GPIO_InitTypeDef GPIO_InitStructure; //对GPIO进行配置
    USART_InitTypeDef USART_InitStructure; //对串口进行配置
    NVIC_InitTypeDef NVIC_InitStructure;  //对串口中断进行配置
    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIO时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能串口时钟
 
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //配置GPIO的AF功能
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //配置GPIO的AF功能
    
     //GPIO初始化
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; // 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;// 配置成AF模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    // 
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // 
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // 
    GPIO_Init(GPIOA,&GPIO_InitStructure); //调用GPIO初始化函数

   //USART1 初始化
    USART_InitStructure.USART_BaudRate = bound;//设置波特率
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//设置有效数据长度
    USART_InitStructure.USART_StopBits = USART_StopBits_1;//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(USART1, &USART_InitStructure); //调用串口初始化函数
    
    USART_Cmd(USART1, ENABLE);  //使能串口1
    
    USART_ClearFlag(USART1, USART_FLAG_TC);
    
    #if EN_USART1_RX    
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能串口中断
    //USART_IT_RXNE: Receive Data register not empty interrupt

//Usart1 NVIC 中断配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;// 要配置的是串口1的中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //响应优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断使能 NVIC_Init(&NVIC_InitStructure); //调用中断初始化函数 #endif }

定义串口中断函数:void USART1_IRQHandler(void) 。这个函数的名字不是随便取的,在startup_stm32f40_41xxx.s中有定义:

        DCD     USART1_IRQHandler                 ; USART1

如果串口发生了中断,就会跳到这个函数,这个函数的处理是要用户自己定义的。

另外用到的几个函数:

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
//调用方法例如:
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

串口是有很多中断源的,传入参数UASRT_IT_RXNE,就是判断接收是不是产生了中断,这个函数做的就是对串口控制寄存器CR1,CR2,CR3某些位,结合SR寄存器,做出的判断。

但是CR寄存器是在哪里赋值的呢?

 

UART 串口相关库函数

标签:

原文地址:http://www.cnblogs.com/nasduc/p/4691363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!