OpenEdv-开源电子网

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

我使用串口1,仅发送数据,发不出数据,但是用中断收发是正常的,调用的是库函数,不知道哪里处理问题,请高手指点,谢谢,急...

[复制链接]

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-8-21
在线时间
20 小时
发表于 2016-10-25 09:33:39 | 显示全部楼层 |阅读模式
5金钱
我使用串口1,仅发送数据,发不出数据,但是用中断收发是正常的,调用的是库函数,不知道哪里处理问题,请指教,程序如下:#include "sys.h"
#include "delay.h"
#include "usart.h"
//#include "adc.h"

void My_USART1_Init(void)
{

        GPIO_InitTypeDef  GPIO_InitStructure;
        USART_InitTypeDef  USART_InitStruct;
       
       
       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟
       RCC_APB2PeriphClockLPModeCmd(RCC_APB2Periph_USART1, ENABLE);//使能USART1时钟


        GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);//把PB6映射到串口1
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);//把PB7映射到串口1
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//PB6
        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;//速度50MHz
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PB6口
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//PB7
        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;//速度50MHz
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PB7口
       
       
        USART_InitStruct.USART_BaudRate=2400;//波特率9600
        USART_InitStruct.USART_WordLength=USART_WordLength_8b;//字长8位
        USART_InitStruct.USART_StopBits=USART_StopBits_1;//1位停止位
        USART_InitStruct.USART_Parity=USART_Parity_No;//不进行奇偶校验
        USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//不使用硬件流
        USART_InitStruct.USART_Mode=USART_Mode_Tx;      //仅使能发送
        USART_Init(USART1, &USART_InitStruct);//初始化串口1
       
        USART_Cmd(USART1, ENABLE);//使能串口1
       
       
}

int main(void)    //主函数
{
       
  My_USART1_Init();   //初始化串口1
        while(1)
        {
               
                USART_SendData(USART1, 0x55); //发送X轴信号

                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
                {}  //等待发送数据寄存器为空
               
        }
}

最佳答案

查看完整内容[请看2#楼]

跟我们实验对比下,我们实验就是用的串口1. 串口1时钟使能方法为: RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟 你的貌似写错了。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

354

主题

1475

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8092
金钱
8092
注册时间
2015-10-15
在线时间
2918 小时
发表于 2016-10-25 09:33:40 | 显示全部楼层
跟我们实验对比下,我们实验就是用的串口1.
串口1时钟使能方法为:        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟   
你的貌似写错了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-8-21
在线时间
20 小时
 楼主| 发表于 2016-10-25 09:52:25 | 显示全部楼层
这个地方对不对啊???
               USART_SendData(USART1, 0x55);

                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
                {}  //等待发送数据寄存器为空
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-10-25
在线时间
2 小时
发表于 2016-10-25 10:43:33 | 显示全部楼层

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//PB6
        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;//速度50MHz
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PB6口
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//PB7
        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;//速度50MHz
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PB7口
        这个GPIO初始化两段合并,你试一下参照原子的串口例程。改一下,看行不行。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-8-21
在线时间
20 小时
 楼主| 发表于 2016-10-25 11:11:04 | 显示全部楼层
zhangweipeng 发表于 2016-10-25 10:43
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//PB6
        GPIO_InitStructure.GPIO_Mode=GPIO_Mo ...

这样应该是没问题的,中断方式也是这样的,是可以的。
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-8-21
在线时间
20 小时
 楼主| 发表于 2016-10-25 15:48:18 | 显示全部楼层
openedvadmin 发表于 2016-10-25 12:12
跟我们实验对比下,我们实验就是用的串口1.
串口1时钟使能方法为:        RCC_APB2PeriphClockCmd(RCC_APB2Perip ...

太感谢了,一语中的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 13:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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