搜索
bottom↓
回复: 13

RTT1.1.0 Alpha的问题反馈 STM32F4的UART3

[复制链接]

出0入17汤圆

发表于 2012-4-25 15:09:39 | 显示全部楼层 |阅读模式
本帖最后由 DOER 于 2012-4-25 15:39 编辑

第一次用RTT,很多不明白的地方。板子用的是STM32F4,UART3;UART.c文件中:
问题1:
/* USART3_REMAP[1:0] = 00 */
#define UART3_GPIO_TX           GPIO_Pin_10
#define UART3_TX_PIN_SOURCE GPIO_PinSource10
#define UART3_GPIO_RX           GPIO_Pin_11
#define UART3_RX_PIN_SOURCE GPIO_PinSource11
#define UART3_GPIO                      GPIOB
#define UART3_GPIO_RCC          RCC_AHB1Periph_GPIOB
#define RCC_APBPeriph_UART3     RCC_APB1Periph_USART3
#define UART3_TX_DMA            DMA1_Stream1
#define UART3_RX_DMA            DMA1_Stream3

DMA1_Stream1/3和STM32F4手册不一致,反了吗?

问题2:
#ifdef RT_USING_UART3
        /* Enable the USART3 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        /* Enable the DMA1 Channel2 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream1_IRQn;       
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
DMA1_Stream1_IRQn似乎应该是DMA1_Stream3_IRQn            
问题3:
上面标记的地方,反复改,串口没有收到字符!(硬件确认是好的)

手册:
Peripheral   Stream 0    Stream 1      Stream 2     Stream 3      Stream 4     Stream 5     Stream 6       Stream 7
Channel 4   UART5_RX  USART3_RX  UART4_RX  USART3_TX  UART4_TX  USART2_RX  USART2_TX  UART5_TX

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入17汤圆

 楼主| 发表于 2012-4-26 14:45:39 | 显示全部楼层
花了1天时间,自贺一下,终于有眉目了。
3个问题
1:TX、RX引脚要分开设置,否则TX=0!
2:实际波特率与设置的不一致
3:DMA跑不了,暂时回避了!修改了原来程序的错误,也没找到原因,但不跟踪发现DMA寄存器设置不了。

/*
* File      : usart.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2009, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
*
* Change Logs:
* Date           Author       Notes
* 2009-01-05     Bernard      the first version
* 2010-03-29     Bernard      remove interrupt Tx and DMA Rx mode
* 2012-02-08     aozima       update for F4.
*/

#include "stm32f4xx.h"
#include "usart.h"
#include "board.h"
#include <serial.h>

/*
* Use UART1 as console output and finsh input
* interrupt Rx and poll Tx (stream mode)
*
* Use UART2 with interrupt Rx and poll Tx
* Use UART3 with DMA Tx and interrupt Rx -- DMA channel 2
*
* USART DMA setting on STM32
* USART1 Tx --> DMA Channel 4
* USART1 Rx --> DMA Channel 5
* USART2 Tx --> DMA Channel 7
* USART2 Rx --> DMA Channel 6
* USART3 Tx --> DMA Channel 2
* USART3 Rx --> DMA Channel 3
*/

#ifdef RT_USING_UART1
struct stm32_serial_int_rx uart1_int_rx;
struct stm32_serial_device uart1 =
{
        USART1,
        &uart1_int_rx,
        RT_NULL
};
struct rt_device uart1_device;
#endif

#ifdef RT_USING_UART2
struct stm32_serial_int_rx uart2_int_rx;
struct stm32_serial_device uart2 =
{
        USART2,
        &uart2_int_rx,
        RT_NULL
};
struct rt_device uart2_device;
#endif

#ifdef RT_USING_UART3
struct stm32_serial_int_rx uart3_int_rx;
struct stm32_serial_device uart3 =
{
        USART3,
        &uart3_int_rx,
        RT_NULL
};
struct rt_device uart3_device;
#endif

//#define USART1_DR_Base  0x40013804
//#define USART2_DR_Base  0x40004404
//#define USART3_DR_Base  0x40004804

/* USART1_REMAP = 0 */
#define UART1_GPIO_TX                GPIO_Pin_9
#define UART1_TX_PIN_SOURCE GPIO_PinSource9
#define UART1_GPIO_RX                GPIO_Pin_10
#define UART1_RX_PIN_SOURCE GPIO_PinSource10
#define UART1_GPIO                        GPIOA
#define UART1_GPIO_RCC      RCC_AHB1Periph_GPIOA
#define RCC_APBPeriph_UART1        RCC_APB2Periph_USART1
#define UART1_TX_DMA                DMA1_Channel4
#define UART1_RX_DMA                DMA1_Channel5

#define UART2_GPIO_TX            GPIO_Pin_2
#define UART2_TX_PIN_SOURCE GPIO_PinSource2
#define UART2_GPIO_RX            GPIO_Pin_3
#define UART2_RX_PIN_SOURCE GPIO_PinSource3
#define UART2_GPIO                    GPIOA
#define UART2_GPIO_RCC           RCC_AHB1Periph_GPIOA
#define RCC_APBPeriph_UART2        RCC_APB1Periph_USART2

/* USART3_REMAP[1:0] = 00 */
#define UART3_GPIO_TX                GPIO_Pin_10
#define UART3_TX_PIN_SOURCE GPIO_PinSource10
#define UART3_GPIO_RX                GPIO_Pin_11
#define UART3_RX_PIN_SOURCE GPIO_PinSource11
#define UART3_GPIO                        GPIOC
#define UART3_GPIO_RCC           RCC_AHB1Periph_GPIOC
#define RCC_APBPeriph_UART3        RCC_APB1Periph_USART3
#define UART3_TX_DMA                DMA1_Stream3
#define UART3_RX_DMA                DMA1_Stream1

static void RCC_Configuration(void)
{
#ifdef RT_USING_UART1
        /* Enable USART2 GPIO clocks */
        RCC_AHB1PeriphClockCmd(UART1_GPIO_RCC, ENABLE);
        /* Enable USART2 clock */
        RCC_APB2PeriphClockCmd(RCC_APBPeriph_UART1, ENABLE);
#endif

#ifdef RT_USING_UART2
        /* Enable USART2 GPIO clocks */
        RCC_AHB1PeriphClockCmd(UART2_GPIO_RCC, ENABLE);
        /* Enable USART2 clock */
        RCC_APB1PeriphClockCmd(RCC_APBPeriph_UART2, ENABLE);
#endif

#ifdef RT_USING_UART3
        /* Enable USART3 GPIO clocks */
        RCC_AHB1PeriphClockCmd(UART3_GPIO_RCC, ENABLE);
        /* Enable USART3 clock */
        RCC_APB1PeriphClockCmd(RCC_APBPeriph_UART3, ENABLE);

        /* DMA clock enable */
//        RCC_APB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
#endif
}

static void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        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;

#ifdef RT_USING_UART1
        /* Configure USART1 Rx/tx PIN */
        GPIO_InitStructure.GPIO_Pin = UART1_GPIO_RX | UART1_GPIO_TX;
        GPIO_Init(UART1_GPIO, &GPIO_InitStructure);

    /* Connect alternate function */
    GPIO_PinAFConfig(UART1_GPIO, UART1_TX_PIN_SOURCE, GPIO_AF_USART1);
    GPIO_PinAFConfig(UART1_GPIO, UART1_RX_PIN_SOURCE, GPIO_AF_USART1);
#endif

#ifdef RT_USING_UART2
        /* Configure USART2 Rx/tx PIN */
        GPIO_InitStructure.GPIO_Pin = UART2_GPIO_TX | UART2_GPIO_RX;
        GPIO_Init(UART2_GPIO, &GPIO_InitStructure);

    /* Connect alternate function */
    GPIO_PinAFConfig(UART2_GPIO, UART2_TX_PIN_SOURCE, GPIO_AF_USART2);
    GPIO_PinAFConfig(UART2_GPIO, UART2_RX_PIN_SOURCE, GPIO_AF_USART2);
#endif

#ifdef RT_USING_UART3
    GPIO_InitStructure.GPIO_Pin = UART3_GPIO_TX;
    GPIO_Init(UART3_GPIO, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = UART3_GPIO_RX;
    GPIO_Init(UART3_GPIO, &GPIO_InitStructure);          // 不知为何,TX RX必须分开设置,此处耗时4小时

    // Connect alternate function
    GPIO_PinAFConfig(UART3_GPIO, UART3_TX_PIN_SOURCE, GPIO_AF_USART3);
    GPIO_PinAFConfig(UART3_GPIO, UART3_RX_PIN_SOURCE, GPIO_AF_USART3);

#endif
}

static void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;

#ifdef RT_USING_UART1
        /* Enable the USART1 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
#endif

#ifdef RT_USING_UART2
        /* Enable the USART2 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
#endif

#ifdef RT_USING_UART3
        /* Enable the USART3 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        /* Enable the DMA1 Channel2 Interrupt */
//        NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//        NVIC_Init(&NVIC_InitStructure);
#endif
}

static void DMA_Configuration(void)
{
#if defined (RT_USING_UART3)
        DMA_InitTypeDef DMA_InitStructure;

//  /* Configure DMA Stream */
//  DMA_InitStructure.DMA_Channel = DMA_CHANNEL;
//  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer;
//  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DST_Buffer;
//  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToMemory;
//  DMA_InitStructure.DMA_BufferSize = (uint32_t)BUFFER_SIZE;
//  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
//  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
//  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
//  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
//  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
//  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
//  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
//  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
//  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
//  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
//  DMA_Init(DMA_STREAM, &DMA_InitStructure);

  /* Configure DMA Stream */
  DMA_InitStructure.DMA_Channel = DMA_Channel_4;
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART3->DR);
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)0;
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
  DMA_InitStructure.DMA_BufferSize = (uint32_t)0;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

  DMA_DeInit(UART3_TX_DMA);
  DMA_Init(UART3_TX_DMA, &DMA_InitStructure);

//        /* fill init structure */
//        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
//        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
//        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
//        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
//        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
//        DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
//        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
//
//        /* DMA1 Channel5 (triggered by USART3 Tx event) Config */
//        DMA_DeInit(UART3_TX_DMA);
//        DMA_InitStructure.DMA_PeripheralBaseAddr = USART3_DR_Base;
//        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
//        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)0;
//        DMA_InitStructure.DMA_BufferSize = 0;
//        DMA_Init(UART3_TX_DMA, &DMA_InitStructure);
        DMA_ITConfig(UART3_TX_DMA, DMA_IT_TC | DMA_IT_TE, ENABLE);
//        DMA_ClearFlag(DMA1_FLAG_TC5);
#endif
}

volatile USART_TypeDef * uart3_debug = USART3;
/*
* Init all related hardware in here
* rt_hw_serial_init() will register all supported USART device
*/
void rt_hw_usart_init()
{
        USART_InitTypeDef USART_InitStructure;

        RCC_Configuration();

        GPIO_Configuration();

        NVIC_Configuration();

        DMA_Configuration();

        /* uart init */
#ifdef RT_USING_UART1
        USART_InitStructure.USART_BaudRate = 115200;
        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);

        /* register uart1 */
        rt_hw_serial_register(&uart1_device, "uart1",
                RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
                &uart1);

        /* enable interrupt */
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
#endif

#ifdef RT_USING_UART2
        USART_InitStructure.USART_BaudRate = 115200;
        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(USART2, &USART_InitStructure);

        /* register uart2 */
        rt_hw_serial_register(&uart2_device, "uart2",
                RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
                &uart2);

        /* Enable USART2 DMA Rx request */
        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
#endif

#ifdef RT_USING_UART3
        USART_InitStructure.USART_BaudRate = 36993;//36993=115200;该处耗时4小时,可能时钟设置的不对,最后偷懒直接用示波器测量,换算
        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(USART3, &USART_InitStructure);

        rt_hw_serial_register(&uart3_device, "uart3",
                RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM,
                &uart3);

        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

#endif
}

出0入0汤圆

发表于 2012-4-30 23:35:27 | 显示全部楼层
    GPIO_InitStructure.GPIO_Pin = UART3_GPIO_TX;
    GPIO_Init(UART3_GPIO, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = UART3_GPIO_RX;
    GPIO_Init(UART3_GPIO, &GPIO_InitStructure);          // 不知为何,TX RX必须分开设置,此处耗时4小时


楼主,不知为何你不分开设置, RX,TX脚属性明显不同吧,RX--输入,TX--输出.
正常是要分开设置的吧.

出0入0汤圆

发表于 2012-5-1 09:25:07 | 显示全部楼层
STM32F4的BSP默认是按STM32F4-Discovery的8M晶振设置的,在stm32f4xx_conf.h中有定义:
  1. #if defined  (HSE_VALUE)
  2. /* Redefine the HSE value; it's equal to 8 MHz on the STM32F4-DISCOVERY Kit */
  3. #undef HSE_VALUE
  4. #define HSE_VALUE    ((uint32_t)8000000)
  5. #endif /* HSE_VALUE */
复制代码

出0入17汤圆

 楼主| 发表于 2012-5-1 20:21:59 | 显示全部楼层
本帖最后由 DOER 于 2012-5-1 20:31 编辑
meisen999 发表于 2012-4-30 23:35
GPIO_InitStructure.GPIO_Pin = UART3_GPIO_TX;
    GPIO_Init(UART3_GPIO, &GPIO_InitStructure);


这个我真没有仔细想,你看:
#ifdef RT_USING_UART1
        /* Configure USART1 Rx/tx PIN */
        GPIO_InitStructure.GPIO_Pin = UART1_GPIO_RX | UART1_GPIO_TX;        GPIO_Init(UART1_GPIO, &GPIO_InitStructure);

    /* Connect alternate function */
    GPIO_PinAFConfig(UART1_GPIO, UART1_TX_PIN_SOURCE, GPIO_AF_USART1);
    GPIO_PinAFConfig(UART1_GPIO, UART1_RX_PIN_SOURCE, GPIO_AF_USART1);
#endif

#ifdef RT_USING_UART2
        /* Configure USART2 Rx/tx PIN */
        GPIO_InitStructure.GPIO_Pin = UART2_GPIO_TX | UART2_GPIO_RX;        GPIO_Init(UART2_GPIO, &GPIO_InitStructure);

USART1、2都没有分开设置。我只是在几年前用过一阵STM32F103,现在赶个STM32F4XX的时髦!会在有空的时候看看DATASHEET,看看上面怎么说的,呵呵。

出0入17汤圆

 楼主| 发表于 2012-5-1 20:26:26 | 显示全部楼层
aozima 发表于 2012-5-1 09:25
STM32F4的BSP默认是按STM32F4-Discovery的8M晶振设置的,在stm32f4xx_conf.h中有定义:

关于晶振,确实是这样的。我的板子上是25M的,谢谢大家的关注!

出0入0汤圆

发表于 2012-11-19 21:20:10 | 显示全部楼层
我试了分开设置还是不行啊,为什么数据都没有。我的串口1和串口3都没数据出来,这是为什么??
/*
* FILE                                                : main.c
* DESCRIPTION                                : This file is main files.
* Author                                : jimmy
* Copyright                        :
* History
* --------------------
* Rev        : 0.00
* Date        : 17/11/2012
* --------------------
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
#define  Toutch_Penel_Baud                 9600
#define  UART_Com_Baud                        9600
extern u8        USART1_Byte_buffer;  
extern u8        USART3_Byte_buffer;
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/


void LED_initial(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void LED_on(void)
{
        GPIO_ResetBits(GPIOC,GPIO_Pin_0);
}
void LED_off(void)
{
        GPIO_SetBits(GPIOC,GPIO_Pin_0);
}
void Com_initial(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        USART_ClockInitTypeDef USART_ClockInitStruct;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
        GPIO_PinAFConfig(GPIOA,GPIO_Pin_9,GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOA,GPIO_Pin_10,GPIO_AF_USART1);
        GPIO_StructInit(&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);



        USART_StructInit(&USART_InitStructure);
        USART_InitStructure.USART_BaudRate =  UART_Com_Baud;
        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_Init(USART1,&USART_InitStructure);
        USART_InitStructure.USART_Mode = USART_Mode_Tx ;
        USART_Init(USART1,&USART_InitStructure);
       
        USART_ClockStructInit(&USART_ClockInitStruct);
        USART_ClockInit  (USART1,&USART_ClockInitStruct);

        USART_ITConfig(USART1,USART_IT_RXNE, ENABLE);
        USART_Cmd(USART1, ENABLE);
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);         

       

}
void Toutch_Penel_initial(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        USART_ClockInitTypeDef USART_ClockInitStruct;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
        GPIO_PinAFConfig(GPIOC,GPIO_Pin_10,GPIO_AF_USART3);
        GPIO_PinAFConfig(GPIOC,GPIO_Pin_11,GPIO_AF_USART3);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        USART_InitStructure.USART_BaudRate = Toutch_Penel_Baud;
        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_Init(USART3,&USART_InitStructure);
        USART_InitStructure.USART_Mode = USART_Mode_Tx ;
        USART_Init(USART3,&USART_InitStructure);
        USART_ClockStructInit(&USART_ClockInitStruct);
        USART_ClockInit  (USART3,&USART_ClockInitStruct);
        USART_ITConfig(USART3,USART_IT_RXNE, ENABLE);
        USART_Cmd(USART3, ENABLE);

        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
void Toutch_Penel_Send(unsigned char data)
{
        USART_SendData(USART3,data);
    while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
}

void Com_Send(unsigned char data)
{
         USART_SendData(USART1,data);
     while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
void System_NVIC_initial(void)
{
       
}
static void Sys_int(void)
{
        LED_initial();
        //System_NVIC_initial();
        Com_initial();
        Toutch_Penel_initial();       
}
int main(void)
{

  Sys_int();
         

  while (1)
  {
                  //Com_Send('a');
                //Com_Send('b');
        //        Com_Send('v');
                Toutch_Penel_Send('1');
                Toutch_Penel_Send('3');
                Toutch_Penel_Send('6');       
  
         
  }
}

出0入0汤圆

发表于 2012-11-20 18:00:30 | 显示全部楼层
本帖最后由 kgsz 于 2012-11-20 18:03 编辑

我也遇到了这个问题,其他程序测试串口3 工作正常!

出0入0汤圆

发表于 2012-11-21 19:00:54 | 显示全部楼层
刚刚下载了最新版 也出现了这个问题 正在改

出0入0汤圆

发表于 2013-2-18 17:13:25 | 显示全部楼层
下载正式版,还是这个问题,我在改。。。

出0入0汤圆

发表于 2014-7-16 14:31:34 | 显示全部楼层
DOER 发表于 2012-4-26 14:45
花了1天时间,自贺一下,终于有眉目了。
3个问题
1:TX、RX引脚要分开设置,否则TX=0!

楼主,请问一下,你用USART3 时可以用FINSH吗,为什么我的可以显示版本信息,却不显示FINSH ,相关宏定义都打开了

出0入0汤圆

发表于 2014-7-17 08:42:59 来自手机 | 显示全部楼层
因为uart3默认被配置成dma模式,所以不适合finsh。新版本应该会更合理些,不过也导致了各个bsp的变动,这几天在一个个改啊

出0入0汤圆

发表于 2014-7-22 15:20:29 | 显示全部楼层
ffxz 发表于 2014-7-17 08:42
因为uart3默认被配置成dma模式,所以不适合finsh。新版本应该会更合理些,不过也导致了各个bsp的变动,这几 ...


为什么我用USART1也不行,只输出版本信息,finsh不启动,我用的版本是1.2.1

出0入0汤圆

发表于 2014-7-30 06:59:33 | 显示全部楼层
UART1没有同学报过啊,你的硬件有问题?UART3是因为配置的问题,目前github上的版本已经改正过来了,新的1.2.2分支会修正这个问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 00:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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