OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7637|回复: 5

请各位大神看看,串口设置那里出问题了,串口没法发送数据

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-10-10
在线时间
0 小时
发表于 2012-11-21 19:24:30 | 显示全部楼层 |阅读模式

小弟刚刚开始学ARM,这个问题好久了都没有解决,求各位大神帮我改改,我的板的是stm32f207的            

#include <stm32f2xx.h>
unsigned char TX_Buffer[]="串口测试!";
unsigned i=0;
void RCC_init(void);
void USART1_IRQHandler(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void);
void USART_initi(void);

int main(void)
{
 SystemInit();
 RCC_init();
 NVIC_Configuration();
 GPIO_Configuration();
 USART_initi();
//  USART_SendData(USART1,TX_Buffer[0]);
 while(1);
}
void RCC_init(void)
{
 RCC_PCLK2Config(RCC_HCLK_Div4);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);  //打开串口1时钟
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  //打开串口1使用的GPIOA时钟
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
 
}
void NVIC_Configuration(void)//串口中断配置
{
 NVIC_InitTypeDef NVIC_InitStruct;
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
 NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;
 NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;
 NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
 NVIC_Init(&NVIC_InitStruct);
}
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStruct;
 
 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;//配置TX管脚;
 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
 GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
 GPIO_Init(GPIOA,&GPIO_InitStruct);
 
 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;//配置RX管脚;
 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
 GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
//  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
//  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
//  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
 GPIO_Init(GPIOA,&GPIO_InitStruct);
 
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
 
 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_8;
 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
 GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
 GPIO_Init(GPIOF,&GPIO_InitStruct);
 
 GPIO_SetBits(GPIOF,GPIO_Pin_7);
 GPIO_SetBits(GPIOF,GPIO_Pin_8);
//  GPIO_ResetBits(GPIOF,GPIO_Pin_7);
}
void USART_initi(void)
{
 USART_InitTypeDef* USART_InitStruct;
//  USART_StructInit(USART_InitStruct);
 USART_InitStruct->USART_BaudRate = 9600;
 USART_InitStruct->USART_WordLength = USART_WordLength_8b;
 USART_InitStruct->USART_StopBits = USART_StopBits_1;
 USART_InitStruct->USART_Parity = USART_Parity_No ;
 USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
 USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None; 
 USART_Init(USART1,USART_InitStruct);
 USART_ITConfig(USART1,USART_IT_TXE|USART_IT_RXNE,ENABLE);//打开接收发送中断
 USART_Cmd(USART1, ENABLE);//使能串口
}
void USART1_IRQHandler(void)
{
 i++;
 if(TX_Buffer!='\0')
 {
  USART_SendData(USART1,TX_Buffer);
 }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-21 21:23:21 | 显示全部楼层
改为:
int main(void)
{
 SystemInit();
 RCC_init();
 NVIC_Configuration();
 GPIO_Configuration();
 USART_initi();
  while(1)
{
  USART_SendData(USART1,TX_Buffer);
delay_ms(500);

};
}

试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-10-10
在线时间
0 小时
 楼主| 发表于 2012-11-22 20:36:06 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子大哥,还是不行啊~~
#include <stm32f2xx.h>
unsigned char TX_Buffer[]="串口测试!";
unsigned i=0;
void RCC_init(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void);
void USART_initi(void);

int main(void)
{
SystemInit();
RCC_init();
NVIC_Configuration();
GPIO_Configuration();
USART_initi();
while(1)
{
if(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==ENABLE)
{
if(TX_Buffer[0]!='\0')
{
USART_SendData(USART1,TX_Buffer); 
}
i++;
}
}
}
void RCC_init(void)
{
RCC_PCLK2Config(RCC_HCLK_Div4);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);  //打开串口1时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  //打开串口1使用的GPIOA时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);

}
void NVIC_Configuration(void)//串口中断配置
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn; 
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;//配置TX管脚;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;//配置RX管脚;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
//  GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
//  GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
//  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOF,&GPIO_InitStruct);

GPIO_SetBits(GPIOF,GPIO_Pin_7);
GPIO_SetBits(GPIOF,GPIO_Pin_8);
//  GPIO_ResetBits(GPIOF,GPIO_Pin_7);
}
void USART_initi(void)
{
USART_InitTypeDef* USART_InitStruct;
//  USART_StructInit(USART_InitStruct);
USART_InitStruct->USART_BaudRate = 9600;
USART_InitStruct->USART_WordLength = USART_WordLength_8b;
USART_InitStruct->USART_StopBits = USART_StopBits_1;
USART_InitStruct->USART_Parity = USART_Parity_No ;
USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
USART_Init(USART1,USART_InitStruct);//还没有开任何中断
//  USART_ITConfig(USART1,USART_IT_TXE|USART_IT_RXNE,ENABLE);//打开接收发送中断
USART_Cmd(USART1, ENABLE);//使能串口
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-22 21:48:04 | 显示全部楼层
那我也不清楚了,串口初始化有问题吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2012-11-23 11:59:39 | 显示全部楼层
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;//配置RX管脚;
 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;           =======》GPIO_Mode_IN_FLOATING
 GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;


 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;//配置TX管脚; 
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF; 
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; 
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;     =========》GPIO_Mode_AF_PP
GPIO_Init(GPIOA,&GPIO_InitStruct);                                                                        
1-1
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-10-10
在线时间
0 小时
 楼主| 发表于 2012-11-23 14:08:21 | 显示全部楼层
回复【5楼】mygod:
---------------------------------
首先感谢这位大哥,我的板子是stm32f207的,它和stm32f1x系列的固件库有些区别,定义不一样
typedef enum

  GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
  GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */
  GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */
  GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 21:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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