串口的历程库

转载 2013年12月04日 23:24:27
新手,第一次自己搭建开发环境,碰到了问题,希望能人帮忙解决一下。
   问题描述:
      从ST官网下载的207的串口的历程库
      板子有4个485口。
      USART4的TX 和RX映射到PC10 PC11上,定义如下:
#define EVAL_COM1                        UART4
#define EVAL_COM1_CLK                    RCC_APB1Periph_UART4
#define EVAL_COM1_TX_PIN                 GPIO_Pin_10
#define EVAL_COM1_TX_GPIO_PORT           GPIOC
#define EVAL_COM1_TX_GPIO_CLK            RCC_AHB1Periph_GPIOC
#define EVAL_COM1_TX_SOURCE              GPIO_PinSource10
#define EVAL_COM1_TX_AF                  GPIO_AF_UART4
#define EVAL_COM1_RX_PIN                 GPIO_Pin_11
#define EVAL_COM1_RX_GPIO_PORT           GPIOC
#define EVAL_COM1_RX_GPIO_CLK            RCC_AHB1Periph_GPIOC
#define EVAL_COM1_RX_SOURCE              GPIO_PinSource11
#define EVAL_COM1_RX_AF                  GPIO_AF_UART4
#define EVAL_COM1_IRQn                   UART4_IRQn 

这个口一切正常,受发均可
   但是一下定义的口都不能用:
#define EVAL_COM2                        USART3
#define EVAL_COM2_CLK                    RCC_APB1Periph_USART3
#define EVAL_COM2_TX_PIN                 GPIO_Pin_10
#define EVAL_COM2_TX_GPIO_PORT           GPIOB
#define EVAL_COM2_TX_GPIO_CLK            RCC_AHB1Periph_GPIOB
#define EVAL_COM2_TX_SOURCE              GPIO_PinSource10
#define EVAL_COM2_TX_AF                  GPIO_AF_USART3
#define EVAL_COM2_RX_PIN                 GPIO_Pin_11
#define EVAL_COM2_RX_GPIO_PORT           GPIOB
#define EVAL_COM2_RX_GPIO_CLK            RCC_AHB1Periph_GPIOB
#define EVAL_COM2_RX_SOURCE              GPIO_PinSource11
#define EVAL_COM2_RX_AF                  GPIO_AF_USART3
#define EVAL_COM2_IRQn                   USART3_IRQn 


#define EVAL_COM3                        UART5
#define EVAL_COM3_CLK                    RCC_APB1Periph_UART5
#define EVAL_COM3_TX_PIN                 GPIO_Pin_12
#define EVAL_COM3_TX_GPIO_PORT           GPIOC
#define EVAL_COM3_TX_GPIO_CLK            RCC_AHB1Periph_GPIOC
#define EVAL_COM3_TX_SOURCE              GPIO_PinSource12
#define EVAL_COM3_TX_AF                  GPIO_AF_UART5
#define EVAL_COM3_RX_PIN                 GPIO_Pin_2
#define EVAL_COM3_RX_GPIO_PORT           GPIOD
#define EVAL_COM3_RX_GPIO_CLK            RCC_AHB1Periph_GPIOD
#define EVAL_COM3_RX_SOURCE              GPIO_PinSource2
#define EVAL_COM3_RX_AF                  GPIO_AF_UART5
#define EVAL_COM3_IRQn                   UART5_IRQn 

#define EVAL_COM4                        USART6
#define EVAL_COM4_CLK                    RCC_APB2Periph_USART6
#define EVAL_COM4_TX_PIN                 GPIO_Pin_6
#define EVAL_COM4_TX_GPIO_PORT           GPIOC
#define EVAL_COM4_TX_GPIO_CLK            RCC_AHB1Periph_GPIOC
#define EVAL_COM4_TX_SOURCE              GPIO_PinSource6
#define EVAL_COM4_TX_AF                  GPIO_AF_USART6
#define EVAL_COM4_RX_PIN                 GPIO_Pin_7
#define EVAL_COM4_RX_GPIO_PORT           GPIOC
#define EVAL_COM4_RX_GPIO_CLK            RCC_AHB1Periph_GPIOC
#define EVAL_COM4_RX_SOURCE              GPIO_PinSource7
#define EVAL_COM4_RX_AF                  GPIO_AF_USART6
#define EVAL_COM4_IRQn                   USART6_IRQn 

   串口已经初始化:
USART_InitStructure.USART_BaudRate = 1200;
  USART_InitStructure.USART_WordLength = USART_WordLength_9b;
  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;

  STM_EVAL_COMInit(COM1, &USART_InitStructure);
   COM1,COM2,COM3,COM4都是如法炮制
   EVAL_COM1的通信正常,其余三个都不行
   调试的时候发现在函数
   void SerialPutChar(uint8_t c)
{
  USART_SendData(EVAL_COM2, c);
  while (USART_GetFlagStatus(EVAL_COM2, USART_FLAG_TXE) == RESET)
  {                
  }
}
中的while上死循环了。
请教怎么回事


问题解决了,果然是时钟的问题。
把函数STM_EVAL_COMInit()中UASRT时钟初始化那里修改一下就好了
因为从官网下的例程,所以当时看的时候,觉得有疑惑,但是没敢怀疑,呵呵,今天尝试修改了一下,就好了
下载的源文件中是:
if (COM == COM1)
  {
    RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
  }        
修改为:
if((COM_USART[COM] == USART6)||(COM_USART[COM] == USART1))
       RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE); 
  else
       RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);  
四个串口都好用了,呵呵,单独测试的

Mysql学习历程基本语法(2)--库操作

SQL基本操作 基本操作根据操作对象进行分类,分为三类:库操作,表操作(字段),数据操作 库操作 一.create database 数据库名字 [库选项] 库选项:用来约束数据库,分为两...

一次调用动态库时出现问题的解决历程

虽然都是一些小问题,但是,倘若没有注意到的话,的确挺费力的。这次注意一下,下一次就可以避免了。分享一下这次历程,希望对大家有帮助。 如果有什么不对的话,还希望给与批评和指正,谢谢!...

VS2012的外部库zint的引入历程(上)

因为打算做个用到条形码的小项目,所以下载了开源zint库,打算搞点事情。 环境:VS2012 ;win7 32位旗舰版 因为zint库依赖于libpng库以及zlib库,所以我先进行了这两个库的配...

【原】基于vc 6.0开发dll动态链接库和测试实例--串口操作

【原】基于vc 6.0开发dll动态链接库和测试实例--串口操作   公司突然下达指令,让我这个从没用过vc的人开发一个接口函数,对接方又比较蛋疼,指定要求将接口封装到dll中进行使用,以下是使用...

串口编程前瞻-熟悉JNI、NDK以及SO库的开发

串口编程前瞻-熟悉JNI、NDK以及SO库的开发   什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或...
  • gjy_it
  • gjy_it
  • 2017年02月07日 16:46
  • 437

QT仪器通信库——串口(SerialPort)的DLL封装

最近想要做一个标准的仪器通信库(包括SerialPort、TCP、UDP、USB等),考虑通信库的通用性,决定采用可以跨平台的QT封装。     QT 5.0以上提供了串口通信库即QSerialPor...

LL库通过串口+DMA方式发送数据

在RM0038(L151的手册)中的Chapter 27.3.13 Continuous communication using DMA章节有配置的方式和顺序: Transmission usin...

解决小钢炮低功耗蓝牙开发板使用官方库串口输出乱码问题

偶然一次机会,笔者幸运的得到一块STM32F401的蓝牙低功耗开发板,之前一直在用F1系列的进行开发,听说F4的浮点运算很强大,让我迫不及待的打开学习F4的大门,拿到板子的那天兴致勃勃的从ST的官网(...

串口基础类库(WIN32)异步通信 _COM_H 源代码

http://www.cnblogs.com/because/archive/2012/06/14/2549809.html   串口基础类库(WIN32)异步通信 _COM_H 源代码   ...

基于HAL库处理UART中断并接收串口传入的数据

研究了下HAL库,在百度上面找发现很多UART串口接收,串口中断处理是从USART那边直接抄过来的,使用的是标准库一类的,在用HAL库配置的工程中完全没法使用,另辟蹊径,通过在文档中翻找HAL打头的函...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:串口的历程库
举报原因:
原因补充:

(最多只允许输入30个字)