stm32初始化三个串口-u球体育app下载

×
单片机 > 单片机程序设计 > 详情

stm32初始化三个串口

发布时间:2024-08-28 发布时间:
|

serial.c

 #include "serial.h"    

    

int fputc(int ch,file *p)       //在使用printf时系统自动条用此函数    

{    

    usart_senddata(usart2,(u8)ch);      

    while(usart_getflagstatus(usart2,usart_flag_txe)==reset);    

    return ch;    

        

}    

/*******************************************************************************  

* 函 数 名         : serial_init  

* 函数功能         : io端口及串口1,时钟初始化函数    a9,a10    

* 输    入         : 无  

* 输    出         : 无  

*******************************************************************************/    

void serial1_init(u32 bt)    

{    

    gpio_inittypedef gpio_initstructure;    //声明一个结构体变量,用来初始化gpio    

    nvic_inittypedef nvic_initstructure;     //中断结构体定义    

    usart_inittypedef  usart_initstructure;   //串口结构体定义    

    

    rcc_apb2periphclockcmd(rcc_apb2periph_gpioa|rcc_apb2periph_usart1|rcc_apb2periph_afio,enable);    

    

    gpio_initstructure.gpio_pin=gpio_pin_9;//tx    

    gpio_initstructure.gpio_speed=gpio_speed_50mhz;    

    gpio_initstructure.gpio_mode=gpio_mode_af_pp;    

    gpio_init(gpioa,&gpio_initstructure);    

    gpio_initstructure.gpio_pin=gpio_pin_10;//rx    

    gpio_initstructure.gpio_mode=gpio_mode_in_floating;    

    gpio_init(gpioa,&gpio_initstructure);    

     

    

    nvic_prioritygroupconfig(nvic_prioritygroup_1);     

    nvic_initstructure.nvic_irqchannel = usart1_irqn;     

    nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;     

    nvic_initstructure.nvic_irqchannelsubpriority = 1;     

    nvic_initstructure.nvic_irqchannelcmd = enable;     

    nvic_init(&nvic_initstructure);    

    

    

    usart_initstructure.usart_baudrate=bt;   //波特率设置为bt    

    usart_initstructure.usart_wordlength=usart_wordlength_8b;    

    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(usart1,&usart_initstructure);    

    usart_cmd(usart1, enable);    

    usart_itconfig(usart1, usart_it_rxne, enable);//使能或者失能指定的usart中断 接收中断    

    usart_clearflag(usart1,usart_flag_tc);//清除usartx的待处理标志位     

}    

    

/*******************************************************************************  

* 函 数 名         : serial2_init  

* 函数功能         : io端口及串口2,时钟初始化函数     a2,a3   

* 输    入         : 无  

* 输    出         : 无  

*******************************************************************************/    

void serial2_init(u32 bt)    

{    

     usart_inittypedef usart_initstructure;    

  nvic_inittypedef nvic_initstructure;     

    gpio_inittypedef gpio_initstructure;    //声明一个结构体变量,用来初始化gpio    

   //使能串口的rcc时钟    

   rcc_apb2periphclockcmd(rcc_apb2periph_gpioa , enable); //使能uart3所在gpiob的时钟    

   rcc_apb1periphclockcmd(rcc_apb1periph_usart2, enable);    

    

   //串口使用的gpio口配置    

   // configure usart2 rx (pb.11) as input floating      

   gpio_initstructure.gpio_pin = gpio_pin_3;    

   gpio_initstructure.gpio_mode = gpio_mode_in_floating;    

   gpio_init(gpioa, &gpio_initstructure);    

    

   // configure usart2 tx (pb.10) as alternate function push-pull    

   gpio_initstructure.gpio_pin = gpio_pin_2;    

   gpio_initstructure.gpio_speed = gpio_speed_50mhz;    

   gpio_initstructure.gpio_mode = gpio_mode_af_pp;    

   gpio_init(gpioa, &gpio_initstructure);    

    

   //配置串口    

   usart_initstructure.usart_baudrate = bt;    

   usart_initstructure.usart_wordlength = usart_wordlength_8b;    

   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;    

    

    

   // configure usart3     

   usart_init(usart2, &usart_initstructure);//配置串口3    

    

  // enable usart1 receive interrupts 使能串口接收中断    

   usart_itconfig(usart2, usart_it_rxne, enable);    

   //串口发送中断在发送数据时开启    

   //usart_itconfig(usart2, usart_it_txe, enable);    

    

   // enable the usart3     

   usart_cmd(usart2, enable);//使能串口3    

    

   //串口中断配置    

   //configure the nvic preemption priority bits       

   nvic_prioritygroupconfig(nvic_prioritygroup_0);    

    

   // enable the usart3 interrupt     

   nvic_initstructure.nvic_irqchannel = usart2_irqn;    

   nvic_initstructure.nvic_irqchannelsubpriority = 0;    

   nvic_initstructure.nvic_irqchannelcmd = enable;    

   nvic_init(&nvic_initstructure);    

}    

  

    

/*******************************************************************************  

* 函 数 名         : serial3_init  

* 函数功能         : io端口及串口3,时钟初始化函数   b10,b11     

* 输    入         : 无  

* 输    出         : 无  

*******************************************************************************/    

void serial3_init(u32 bt)    

    

{    

    usart_inittypedef usart_initstructure;    

  nvic_inittypedef nvic_initstructure;     

    gpio_inittypedef gpio_initstructure;    //声明一个结构体变量,用来初始化gpio    

   //使能串口的rcc时钟    

   rcc_apb2periphclockcmd(rcc_apb2periph_gpiob , enable); //使能uart3所在gpiob的时钟    

   rcc_apb1periphclockcmd(rcc_apb1periph_usart3, enable);    

    

   //串口使用的gpio口配置    

   // configure usart2 rx (pb.11) as input floating      

   gpio_initstructure.gpio_pin = gpio_pin_11;    

   gpio_initstructure.gpio_mode = gpio_mode_in_floating;    

   gpio_init(gpiob, &gpio_initstructure);    

    

   // configure usart2 tx (pb.10) as alternate function push-pull    

   gpio_initstructure.gpio_pin = gpio_pin_10;    

   gpio_initstructure.gpio_speed = gpio_speed_50mhz;    

   gpio_initstructure.gpio_mode = gpio_mode_af_pp;    

   gpio_init(gpiob, &gpio_initstructure);    

    

   //配置串口    

   usart_initstructure.usart_baudrate = bt;    

   usart_initstructure.usart_wordlength = usart_wordlength_8b;    

   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;    

    

    

   // configure usart3     

   usart_init(usart3, &usart_initstructure);//配置串口3    

    

  // enable usart1 receive interrupts 使能串口接收中断    

   usart_itconfig(usart3, usart_it_rxne, enable);    

   //串口发送中断在发送数据时开启    

   //usart_itconfig(usart2, usart_it_txe, enable);    

    

   // enable the usart3     

   usart_cmd(usart3, enable);//使能串口3    

    

   //串口中断配置    

   //configure the nvic preemption priority bits       

   nvic_prioritygroupconfig(nvic_prioritygroup_0);    

    

   // enable the usart3 interrupt     

   nvic_initstructure.nvic_irqchannel = usart3_irqn;    

   nvic_initstructure.nvic_irqchannelsubpriority = 0;    

   nvic_initstructure.nvic_irqchannelcmd = enable;    

   nvic_init(&nvic_initstructure);    

        

        

}    

    

     

    

    

/*******************************************************************************  

* 函 数 名         : serial1_sned_char  

* 函数功能         : 串口1发送一字节        

* 输    入         : 无  

* 输    出         : 无  

*******************************************************************************/    

void serial1_sned_char(u8 temp)    

        

{    

        

        

    usart_senddata(usart1,(u8)temp);        

    while(usart_getflagstatus(usart1,usart_flag_txe)==reset);    

        

}    

    

/*******************************************************************************  

* 函 数 名         : serial1_sned_buff  

* 函数功能         : 串口1发送一字符串       

* 输    入         : 无  

* 输    出         : 无  

*******************************************************************************/    

void serial1_sned_buff(u8 buf[],u32 len)    

        

{    

    u32 i;    

    for(i=0;i

    serial1_sned_char(buf[i]);    

        

}    

    

    

    

/*******************************************************************************  

* 函 数 名         : serial2_sned_char  

* 函数功能         : 串口2发送一字节        

* 输    入         : 无  

* 输    出         : 无  

*******************************************************************************/    

void serial2_sned_char(u8 temp)    

        

{    

        

    usart_senddata(usart2,(u8)temp);        

    while(usart_getflagstatus(usart2,usart_flag_txe)==reset);    

        

}    

    

    

    

/*******************************************************************************  

* 函 数 名         : serial2_sned_buff  

* 函数功能         : 串口2发送一字符串       

* 输    入         : 无  

* 输    出         : 无  

*******************************************************************************/    

void serial2_sned_buff(u8 buf[],u32 len)    

        

    

{    

    u32 i;    

    for(i=0;i

    serial2_sned_char(buf[i]);    

        

        

}    

    

//--------------------------------------------------------------------------------------------------------    

  

    

/*******************************************************************************  

* 函 数 名         : serial3_sned_char  

* 函数功能         : 串口3发送一字节        

* 输    入         : 无  

* 输    出         : 无  

*******************************************************************************/    

void serial3_sned_char(u8 temp)    

        

{    

    usart_senddata(usart3,(u8)temp);        

    while(usart_getflagstatus(usart3,usart_flag_txe)==reset);    

        

}    

    

    

    

/*******************************************************************************  

* 函 数 名         : serial3_sned_buff  

* 函数功能         : 串口3发送一字符串       

* 输    入         : 无  

* 输    出         : 无  

*******************************************************************************/    

void serial3_sned_buff(u8 buf[],u32 len)    

        

    

{    

    u32 i;    

    for(i=0;i

    serial3_sned_char(buf[i]);    

            

serial.h

**************************************************/  

  

#ifndef _serial_  

#define _serial_  

  

#include "stm32f10x.h"  

#include "stdio.h"  

  

  

//------------------------------------------------------------------------------------------  

  

/******************************************************************************* 

* 函 数 名         : fputc 

* 函数功能         : printf会调用 

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

int fputc(int ch,file *p);  

  

/******************************************************************************* 

* 函 数 名         : serial1_init 

* 函数功能         : io端口及串口1,时钟初始化函数       

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

void serial1_init(u32 bt);  

  

  

/******************************************************************************* 

* 函 数 名         : serial1_sned_char 

* 函数功能         : 串口1发送一字节       

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

void serial1_sned_char(u8 temp);  

  

  

/******************************************************************************* 

* 函 数 名         : serial1_sned_buff 

* 函数功能         : 串口1发送一字符串      

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

void serial1_sned_buff(u8 buf[],u32 len);  

  

//-----------------------------------------------------------------------------------------------------  

  

/******************************************************************************* 

* 函 数 名         : serial2_init 

* 函数功能         : io端口及串口2,时钟初始化函数       

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

void serial2_init(u32 bt);  

  

  

  

/******************************************************************************* 

* 函 数 名         : serial2_sned_char 

* 函数功能         : 串口2发送一字节       

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

void serial2_sned_char(u8 temp);  

  

  

  

/******************************************************************************* 

* 函 数 名         : serial2_sned_buff 

* 函数功能         : 串口2发送一字符串      

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

void serial2_sned_buff(u8 buf[],u32 len);  

  

  

//--------------------------------------------------------------------------------------------------------  

  

/******************************************************************************* 

* 函 数 名         : serial3_init 

* 函数功能         : io端口及串口3,时钟初始化函数       

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

void serial3_init(u32 bt);  

  

  

  

/******************************************************************************* 

* 函 数 名         : serial3_sned_char 

* 函数功能         : 串口3发送一字节       

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

void serial3_sned_char(u8 temp);  

  

  

  

/******************************************************************************* 

* 函 数 名         : serial3_sned_buff 

* 函数功能         : 串口3发送一字符串      

* 输    入         : 无 

* 输    出         : 无 

*******************************************************************************/  

void serial3_sned_buff(u8 buf[],u32 len);  


串口中断函数处理部分

void usart1_irqhandler(void)  

{  

  

    usart_clearflag(usart1,usart_flag_tc);  

    if(usart_getitstatus(usart1,usart_it_rxne)!=bit_reset)//检查指定的usart中断发生与否  

    {  

          

    u8  k=usart_receivedata(usart1);  

    serial1_sned_char(k 1);  

      

    }  

      

}  

  

void usart2_irqhandler(void)  

{  

        usart_clearflag(usart2,usart_flag_tc);  

    if(usart_getitstatus(usart2,usart_it_rxne)!=bit_reset)//检查指定的usart中断发生与否  

    {  

          

    u8  k=usart_receivedata(usart2);  

          

    serial1_sned_char(k 1);  

      

    }  

      

}  

  

void usart3_irqhandler(void)  

{  

        usart_clearflag(usart3,usart_flag_tc);  

    if(usart_getitstatus(usart3,usart_it_rxne)!=bit_reset)//检查指定的usart中断发生与否  

    {  

          

    u8  k=usart_receivedata(usart3);  

    serial1_sned_char(k 1);  

      

    }  

      

}  



关键字:stm32  初始化  三个串口 

『本文转载自网络,u球体育app下载的版权归原作者所有,如有侵权请联系删除』

热门文章 更多
stm32问题记录:这回keil编译器背锅
网站地图