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

2019-07-20 19:19发布

我使用串口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)
                {}  //等待发送数据寄存器为空
               
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
openedvadmin
1楼-- · 2019-07-21 00:31
 精彩回答 2  元偷偷看……
库库03
2楼-- · 2019-07-21 05:20
这个地方对不对啊???
               USART_SendData(USART1, 0x55);

                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
                {}  //等待发送数据寄存器为空
zhangweipeng
3楼-- · 2019-07-21 07:12

        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初始化两段合并,你试一下参照原子的串口例程。改一下,看行不行。
库库03
4楼-- · 2019-07-21 10:49
 精彩回答 2  元偷偷看……
库库03
5楼-- · 2019-07-21 12:49
openedvadmin 发表于 2016-10-25 12:12
跟我们实验对比下,我们实验就是用的串口1.
串口1时钟使能方法为:        RCC_APB2PeriphClockCmd(RCC_APB2Perip ...

太感谢了,一语中的。

一周热门 更多>