7978|5

4

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

usart1 remap [复制链接]

我用的是神舟四号开发板 在光盘中提供了一个使用usart1 default端口的例程
自己做的板子用的是usart1 remap的
我想将光盘中的例程移植到我的板子上
改了一下Tx Rx 引脚的位置并配置了io复用寄存器中usart1 复用位
但不能收发
想请问一下是否有哪个地方纰漏了??
此帖出自stm32/stm8论坛

最新回复

COM_USART[COM] COM_TX_PIN[COM]  COM_RX_PIN[COM] 都正确吗 软件仿真一下 下面的代码是否有问题? RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE);   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB1Periph_USART3 |RCC_APB1Periph_UART4, ENABLE); //如果是串口一那么 应该是 RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE); 否则 RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE); 看一下手册 记不太清楚了 if (COM == COM1) { /* Enable the USART2 Pins Software Remapping */ GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE); } else //com == com2 { /* Enable the USART1 Pins */ GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//自己增加 重映射usart1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开usart1映射后io口时钟PB( Tx PB6 , Rx PB7) RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE); }  详情 回复 发表于 2011-5-9 14:45
点赞 关注
 

回复
举报

2131

帖子

0

TA的资源

至上芯片

沙发
 
楼主可以把程序发一下吗,引脚的时钟打开了吗
此帖出自stm32/stm8论坛
 
个人签名处处留心皆学问!
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 daicheng 的帖子

//define 对应映射后的usart1
#define EVAL_COM2_STR                                            "USART1"
#define EVAL_COM2                                                     USART1
#define EVAL_COM2_CLK                                            RCC_APB2Periph_USART1
#define EVAL_COM2_TX_PIN                                       GPIO_Pin_6
#define EVAL_COM2_TX_GPIO_PORT                        GPIOB
#define EVAL_COM2_TX_GPIO_CLK                           RCC_APB2Periph_GPIOA
#define EVAL_COM2_RX_PIN                                       GPIO_Pin_7
#define EVAL_COM2_RX_GPIO_PORT                        GPIOB
#define EVAL_COM2_RX_GPIO_CLK                           RCC_APB2Periph_GPIOA
#define EVAL_COM2_IRQn                                           USART1_IRQn

void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable GPIO clock */
  RCC_APB2PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM] | RCC_APB2Periph_AFIO, ENABLE);

  if (COM == COM1)
  {
    /* Enable the USART2 Pins Software Remapping */
    GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
    RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
  }
  else                                                                          //com == com2
  {
    /* Enable the USART1 Pins */
    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//自己增加 重映射usart1
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开usart1映射后io口时钟PB( Tx PB6 , Rx  PB7)
   
    RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
  }

  /* Configure USART Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);

  /* Configure USART Rx as input floating */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];
  GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);

  /* USART configuration */
  USART_Init(COM_USART[COM], USART_InitStruct);
   
  /* Enable USART */
  USART_Cmd(COM_USART[COM], ENABLE);
}
时钟开了的~

[ 本帖最后由 dong_j_t 于 2011-5-9 13:39 编辑 ]
此帖出自stm32/stm8论坛
 
 

回复

2131

帖子

0

TA的资源

至上芯片

4
 
COM_USART[COM] COM_TX_PIN[COM]  COM_RX_PIN[COM] 都正确吗
软件仿真一下
下面的代码是否有问题?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB1Periph_USART3 |RCC_APB1Periph_UART4, ENABLE);
//如果是串口一那么 应该是
RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
否则
RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
看一下手册 记不太清楚了
if (COM == COM1)
{
/* Enable the USART2 Pins Software Remapping */
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
RCC_APB1PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
}
else //com == com2
{
/* Enable the USART1 Pins */
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//自己增加 重映射usart1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开usart1映射后io口时钟PB( Tx PB6 , Rx PB7)

RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE);
}
此帖出自stm32/stm8论坛
 
个人签名处处留心皆学问!
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 daicheng 的帖子

void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct) 的入口参数COM == COM2(值为1,对应usart1)
函数中如果COM == COM2则执行
/* Enable the USART1 Pins */
    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//重重映射usart1
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能remap后的Tx(PB6) 和 Rx(PB7)管脚时钟
   RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE);//使能USART1时钟(COM_USART_CLK[COM2] 对应 RCC_APB2Periph_USART1)
COM_RX_PORT[COM2]和COM_TX_PORT[COM2]都是GPIOB (应为remap后Tx为PB6 和 Rx为PB7)
COM_USART[COM2]为USART1
此帖出自stm32/stm8论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 4楼 daicheng 的帖子

我单步跟踪运行时发现发送数据时 USART_SR寄存器的TC标志 被置1
这是不是表明数据已经通过usart1发送出去了?
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表