欢迎来到泰骏兴电子,大家有问题可以直接联系管理员QQ:233619809单片机 QQ群:59194556 各位游客也可以注册玩玩,享受更多权益。温馨提示:本网站仅提供平台学习以及渠道,一切后果自行承担,还望广大用户提高自我意识,请不要轻易相信他人,请不要轻易相信他人,请不要轻易相信他人。为了更好的管理论坛工作,所以现在使用邮箱注册,如果以前的邮箱不能修改的,请联系管理员代为修改

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 54|回复: 0

STM32F103的串口2程序

[复制链接]
发表于 2023-5-11 15:57:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
#define usart2_MAX 100
extern uchar usart2_data[usart2_MAX];
extern uchar usart2_rx;
void usart2_init(u32 Baud_rate);
void USART2_Sned_Char(uchar pchar);//串口发出一个16进制数
void empty_usart2_data(uchar q);//清除



uchar usart2_data[usart2_MAX];
uchar usart2_rx;

void usart2_init(u32 Baud_rate)
{
            GPIO_InitTypeDef GPIO_Initusartgpio;
            USART_InitTypeDef USART_Initusart2;
            NVIC_InitTypeDef Init_NVIC;
            
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);   
            RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);   
            
            GPIO_Initusartgpio.GPIO_Mode=GPIO_Mode_AF_PP;
            GPIO_Initusartgpio.GPIO_Pin=GPIO_Pin_2;
            GPIO_Initusartgpio.GPIO_Speed=GPIO_Speed_50MHz;
            GPIO_Init(GPIOA,&GPIO_Initusartgpio);
            
            GPIO_Initusartgpio.GPIO_Mode=GPIO_Mode_IN_FLOATING;
            GPIO_Initusartgpio.GPIO_Pin=GPIO_Pin_3;
            GPIO_Initusartgpio.GPIO_Speed=GPIO_Speed_50MHz;
            GPIO_Init(GPIOA,&GPIO_Initusartgpio);//初始化IO口
            
            USART_Initusart2.USART_BaudRate=Baud_rate;
            USART_Initusart2.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
            USART_Initusart2.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
            USART_Initusart2.USART_Parity=USART_Parity_No;
            USART_Initusart2.USART_StopBits=USART_StopBits_1;
            USART_Initusart2.USART_WordLength=USART_WordLength_8b;
            USART_Init(USART2,&USART_Initusart2);//配置串口工作模式
            
            USART_Cmd(USART2,ENABLE);//使能中断
            
            USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//开启中断服务
            
            
            Init_NVIC.NVIC_IRQChannel=USART2_IRQn;//指出哪一个通道
            Init_NVIC.NVIC_IRQChannelCmd=ENABLE;
            Init_NVIC.NVIC_IRQChannelPreemptionPriority=1;
            Init_NVIC.NVIC_IRQChannelSubPriority=2;
            NVIC_Init(&Init_NVIC);
            
            
}
void USART2_IRQHandler()//串口1接收 中断
{
            u8 buffer;
            if(USART_GetITStatus(USART2,USART_IT_RXNE))
    {
            buffer=USART_ReceiveData(USART2);
            usart2_data[usart2_rx++]=buffer;
            USART_ClearITPendingBit(USART2,USART_IT_RXNE);//清除标志位
    }
}
void USART2_Sned_Char(uchar pchar)//串口发出一个16进制数
{  
//    USART_SendData(USART2,(uchar)temp);      
//    while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);      
    USART2->DR = pchar;
    while((USART2->SR&0X40)==0);//循环发送,直到发送完毕   
      
}

//void USART2_Sned_Char(uchar temp)//串口发出一个16进制数
// {  
//    USART_SendData(USART2,(uchar)temp);      
//    while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);      
//}
void empty_usart2_data(uchar q)
{
            uint w;
            for(w=0;w<usart2_MAX;w++)
    {
            usart2_data[w]=q;
    }
}



















高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|泰骏兴电子科技有限公司 ( 粤ICP备2023060260号-1 ) 单片机爱好者

GMT+8, 2025-10-31 17:12

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表