【前提】
实际应用中,芯片型号为STM32F030CCT6,串口1用于模组通讯,串口2用于仪表通讯,串口3用于调试,log输出

串口1配置

void USART1_Config(u32 baud)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//开启时钟RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);  //引脚复用配置GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1); USART_InitStructure.USART_BaudRate = baud;   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;    USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;   USART_InitStructure.USART_StopBits = USART_StopBits_1;    USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_Parity = USART_Parity_No;USART_Init(USART1,&USART_InitStructure);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);USART_Cmd(USART1, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|  GPIO_Pin_10;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;       //复用模式  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;         //推挽输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      //串口的应用波特率最大115200.2M足够,既省电噪声也小 GPIO_Init(GPIOA, &GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority = 0;NVIC_Init(&NVIC_InitStructure);
}

串口2配置

方式类似,此处省略…

串口3配置

void USART3_Config(u32 baud)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART3, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_4);  //引脚复用配置GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_4); USART_InitStructure.USART_BaudRate = baud;   USART_InitStructure.USART_HardwareFlowControl =                            USART_HardwareFlowControl_None;    USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;   USART_InitStructure.USART_StopBits = USART_StopBits_1;    USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_Parity = USART_Parity_No;USART_Init(USART3,&USART_InitStructure);USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);USART_Cmd(USART3, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|  GPIO_Pin_11;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;       //复用模式  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;         //推挽输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      GPIO_Init(GPIOB, &GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannel = USART3_6_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority = 2;NVIC_Init(&NVIC_InitStructure);
}

注意事项

  1. 开启引脚复用功能时,引脚为 GPIO_PinSourcex,不是 GPIO_pins_define,否则串口会配置失败,进入硬件中断,习惯使用STM32F103系列的,这里很容易出错
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_4);
  2. 启动文件要选择startup_stmf030xc.s
    中断向量表中有USART3_6_IRQHandler,否则产生中断时找不到中断入口地址
    注:startup_stmf030.s中没有USART3_6_IRQHandler
  3. 需要打开STM32F030xC宏定义,才会有中断向量USART3_6_IRQn的定义

方式1:在stm32f0xx.h中打开注释 #define STM32F030xC

方式2:在工程魔法棒中添加

5. 因为串口3-6共用一个中断函数,当进入中断时,需要判断具体哪个串口

void USART3_6_IRQHandler(void)
{if(USART_GetITStatus(USART3, USART_IT_RXNE) == SET){USART3_ReceiveLongData();USART_ClearFlag(USART3,USART_FLAG_RXNE);}
}

6.在进行串口配置时,最好先初始化串口再进行IO口配置,串口没初始化前可能有浮空电平,导致设备刚上电时串口乱发数据的问题

STM32F030CCT6串口3使用总结相关推荐

  1. python第三方库之学习pyserial库--串口通信

    pyserial串口通信库 1.安装pyserial库 2.填写串口参数的注意事项 3.简单封装一下 4.碰到的bug 1.安装pyserial库 pip install pyserial versi ...

  2. 【嵌入式】openmv与stm32的串口通信

    参考:(文中部分图/文字/代码来自以下文章,部分内容由于时间久远已经找不到原作者,可联系注明或删除) PYTHON串口数据打包发送STM32接收数据解析 openmv中文文档 这里以openmv循迹代 ...

  3. Android 串口通讯 获取卡号

    首先你的andoridstudio 需要配置ndk 环境 然后在去下载谷歌的的demo 下载地址 把这些直接复制到代码中 一般  jni C语言调用java 是指定包名调用的 所有android_se ...

  4. 51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

  5. VC串口通信编程-2

    VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...

  6. pci串口驱动安装失败_TSC TTP-243E Pluse装LTP并口驱动无法安装

    一.前言描述 接到客户报修说,电脑无法开机,即到哥上门维修立即安排人员到现场查看原因,到现场后,查看的确是电脑系统问题,重新安装系统,安装完成系统后,发现打印机无法使用.这个打印机型号是TSC TTP ...

  7. rs232串口驱动_LED驱动电路设计

    这里设计了两种方案,方案一目标需要低功耗的led,方案二目标需要高功耗的LED.这里重点说下第一种方案,方案电路图如图所示.LED直接通过一个上拉排阻将8个LED连接在单片机上,这样的优点是电路结构简 ...

  8. 3.实现串口功能及消息邮箱

    提醒: 如果您是完全按照<1.一步一步移植ucos到stm32f103开发版(修订版)>来新建的工程的话,那很遗憾,你要重新建立一个工程,因为,在那篇文章的步骤1中,我们选中了GPIO,但 ...

  9. xk3190串口通讯JAVA开发包_常用品牌plc通讯协议汇总学习

    一.美系厂家Rockwell ABRockwell的PLC主要是包括:PLC2.PLC3.PLC5.SLC500.ControlLogix等型号,PLC2和PLC3是早期型号,现在用的比较多的小型PL ...

最新文章

  1. 弹性分组环(RPR)技术特点及其在城域网中的应用
  2. PostgreSQL流复制之二:pgpool-II实现PostgreSQL数据库集群(转发+整理)
  3. java中先序创建一棵树,恳求大佬指点!!!首先标明空子树的先根遍历序列建立一棵二叉树...
  4. apple air装双系统(win7)
  5. 学习进度条——第八周
  6. cname 别名记录 解析过程_云解析是什么?需要购买吗?
  7. oracle 用户禁止登录,[转] oracle限制用户在某个时间段内禁止登录数据库
  8. TCP/IP学习(30)——L2数据链路层的数据包处理详细流程
  9. 关于汉语转换拼音的组件
  10. tensorrt之tensorrtx编译:遇到的错误提示
  11. 190208每日一句
  12. SVM-支持向量机算法概述
  13. 计算机io设备是cpu控制的吗,I/O控制器及控制方式,了解一下
  14. mysql存储包含单引号英文字符串,SQL中写入包含有英文单引号“ '' ”失败问题深入详解...
  15. dom4j解析xml格式字符串获取标签属性和内容
  16. 暗黑破坏神3 夺魂之镰曝光“威斯特玛”城背景
  17. 吴裕雄--天生自然 诗经:古朗月行
  18. 远程计算机网络会议有哪些优缺点,远程会议
  19. 计算机与网络技术基础
  20. 蝴蝶飞舞(butterfly)

热门文章

  1. 一个总经理的11个经典面试问题 (转载)
  2. 英国普利茅斯大学:量子计算机与脑机接口的“相生相克”
  3. hadoop读写mysql数据库
  4. sunday算法特征码_sunday 算法
  5. 基于ADI-DSP-1452外挂flash模拟声浪功能调试
  6. win32 运行ucosii移植lwip2.1.2问题记录
  7. 【数据采集】获取网站数据(二)
  8. python os.walk 指定遍历深度_python遍历文件夹,指定遍历深度与忽略目录的方法
  9. 为什么要学Python编程?(附Python学习路线)
  10. c c++操作windows的注册表项