串口实验改用串口2实现

发布者:数字火花最新更新时间:2018-10-17 来源: eefocus关键字:串口实验  串口2 手机看文章 扫描二维码
随时随地手机看文章

一。串口2初始化

void uart_init(u32 bound)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  GPIO_InitTypeDef GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIOA时钟

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //串口2的时钟来自PCLK1

   USART_DeInit(USART2);  //复位串口2

   //USART2_TX   PA.2

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

  GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA2

   

    //USART2_RX   PA.3

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入

  GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA3

USART_InitStructure.USART_BaudRate = bound;  //设置波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

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(USART2, &USART_InitStructure); //初始化串口2

NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能

NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器

  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断

  USART_Cmd(USART2, ENABLE);                    //使能串口2

}

二。printf函数设置

//////////////////////////////////////////////////////////////////

//加入以下代码,支持printf函数,而不需要选择use MicroLIB  

#if 1

#pragma import(__use_no_semihosting)             

//标准库需要的支持函数                 

struct __FILE 

int handle; 

}; 

FILE __stdout;       

//定义_sys_exit()以避免使用半主机模式    

_sys_exit(int x) 

x = x; 

//重定义fputc函数 

int fputc(int ch, FILE *f)

{      

while((USART2->SR&0X40)==0);//循环发送,直到发送完毕   

        USART2->DR = (u8) ch;      

return ch;

}

#endif 

三。串口2的中断服务函数

void USART2_IRQHandler(void)                 //串口2中断服务程序

{

    u8 Res;

    #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.

    OSIntEnter();    

    #endif

    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a      结尾)

    {

Res =USART_ReceiveData(USART2); //读取接收到的数据

if((USART_RX_STA&0x8000)==0)//接收未完成

{

if(USART_RX_STA&0x4000)//接收到了0x0d

{

         if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始

else USART_RX_STA|=0x8000; //接收完成了 

}

else //还没收到0X0D

{

if(Res==0x0d)USART_RX_STA|=0x4000;

else

{

USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

USART_RX_STA++;

if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接                                 收  

}  

}

}    

 } 


关键字:串口实验  串口2 引用地址:串口实验改用串口2实现

上一篇:49. RTC实验讲解
下一篇:通过串口给STM32烧写程序

推荐阅读最新更新时间:2024-03-16 16:16

K210学习记录(2)——UART(串口
0、引言 本系列博客仅作为本人学习K210单片机的学习记录,主要学习其内部资源使用,作为初学者难免有错误之处,如有发现还望指出。 硬件:Sipeed Maix Dock开发板(推荐官方KD233开发板) 软件:Kendryte IDE(基于VS Code 开发) 文档: Kendryte IDE使用手册 Standalone SDK编程指南 芯片技术规格书 SDK: Kendryte SDK MaixPy/drive 1、UART——interrupt 以下代码为官方代码库“kendryte_uart-interrupt-standalone”修改而成,实现的功能为将电脑发送的字符串,在中断回调函数中存入缓存v_b
[单片机]
K210学习记录(<font color='red'>2</font>)——UART(<font color='red'>串口</font>)
IIC读写AT24C02代码2——串口命令控制多页读写
通过串口输入 R 、W 进行控制程序读写IIC设备。波特率9600bps,晶振115200HZ。 main.c /*----------------------------------------------- IIC编程 1 编写:Louis 邮箱:kaly.liu@163.com 日期:2015.06.01 修改:通过串口命令R/W,控制EEPROM的读R写W。并从串口提示。 改进:增加对页读写功能 晶振:11.0592MHZ NOTE:*通过实测发现,AT24C02可以连续写入16BYTE字节,而且地址要连续的两个页。就是0~15,16~31,。。。 -------------------------
[单片机]
STM32的usart2串口调试
先是参考 http://wenku.baidu.com/view/78f6b1350b4c2e3f572763e9.html 调通了usart1 然后将程序进行修改,对Usart2进行配置,配置完了之后,程序还是没有正确,然后在void GPIO_cfg();函数中添加一句 GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); 最后程序如下, #include stm32f10x_lib.h FlagStatus RX_status; FlagStatus Tx_status; void RCC_cfg(void); v
[单片机]
STM32F10x 学习笔记6(USART实现串口通讯 2
这次讲讲利用串口收发中断来进行串口通讯。STM32 上为每个串口分配了一个中断。也就是说无论是发送完成还是收到数据或是数据溢出都产生同一个中断。程序需在中断处理函数中读取状态寄存器(USART_SR)来判断当前的是什么中断。下面的中断映像图给出了这些中断源是如何汇合成最终的中断信号的。图中也给出了如何控制每一个单独的中断源是否起作用。 另外,Cortex-M3 内核中还有个NVIC,可以控制这里的中断信号是否触发中断处理函数的执行,还有这些外部中断的级别。关于NVIC 可以参考《ARM CortexM3 权威指南》,里面讲解的非常详细。 简单的说,为了开启中断,我们需要如下的代码: NVIC_InitType
[单片机]
STM32F10x 学习笔记6(USART实现<font color='red'>串口</font>通讯 <font color='red'>2</font>)
stm8 uart2 串口接收中断协议解码+定时器中断
协议解码的时候,如果上位机发送数据不完整或者有错误,通过定时器中断将之接收的不完整数据清楚。定时的时间长短可有定时器觉得,ms为单位。 //初始化位毫秒单位 void Timer_Init() { TIM1_PSCRH = (unsigned char) ( ( (F_CPU / 1000) - 1) 8); /* 16M系统时钟经预分频f=fck/(PSCR+1) */ TIM1_PSCRL = (unsigned char) ( (F_CPU / 1000) - 1); /* PSCR=0x3E7F,f=16M/(0x3E7F+1)=1000Hz,每个计数周期1ms */ TIM1_ARRH = 0;
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved