stm32f串口发送字符为什么不能实现呢

2019-07-14 21:00发布

下面写的是通过STM32串口发送舵机命令给舵机驱动器,为什么不能实现呢?作为新人,希望大家多多指教,非常感谢!!!#include"stdio.h"#include"stm32f10x_lib.h"#include"stdint.h"
void RCC_Configuration(void);void GPIO_Configuration(void);void USART_Config(USART_TypeDef* USARTx);void USART_SendChar(USART_TypeDef* USARTx,uint8_t data);
int main(void){    RCC_Configuration();    //系统时钟设置    GPIO_Configuration();  //端口初始化     USART_Config(USART1);  //串口1初始化               int i=0;      char buf[]="#0P1600S750<cr>";            for(i=0;i<15;i++)//发送字符串       {          USART_SendChar(USART1,buf);       }}
void RCC_Configuration(void){   /* 定义枚举类型变量 HSEStartUpStatus */        ErrorStatus HSEStartUpStatus;                  /* 复位系统时钟设置*/          RCC_DeInit();          /* 开启HSE*/          RCC_HSEConfig(RCC_HSE_ON);          /* 等待HSE起振并稳定*/          HSEStartUpStatus = RCC_WaitForHSEStartUp();        /* 判断HSE起是否振成功,是则进入if()内部 */          if(HSEStartUpStatus == SUCCESS)          {            /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */            RCC_HCLKConfig(RCC_SYSCLK_Div1);             /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */            RCC_PCLK2Config(RCC_HCLK_Div1);             /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */            RCC_PCLK1Config(RCC_HCLK_Div2);            /* 设置FLASH延时周期数为2 */            FLASH_SetLatency(FLASH_Latency_2);            /* 使能FLASH预取缓存 */            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);            /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);            /* 使能PLL */             RCC_PLLCmd(ENABLE);            /* 等待PLL输出稳定 */            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);            /* 选择SYSCLK时钟源为PLL */            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);            /* 等待PLL成为SYSCLK时钟源 */            while(RCC_GetSYSCLKSource() != 0x08);          }
          /* 开启USART1和GPIOA时钟 */          RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA , ENABLE); }
void GPIO_Configuration(void){    GPIO_InitTypeDef GPIO_InitStructure;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                      //USART1 TX   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;             //复用推挽输出   GPIO_Init(GPIOA,&GPIO_InitStructure);                     //A端口
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                  //USART1 RX   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //复用开漏输入   GPIO_Init(GPIOA, &GPIO_InitStructure);                      //A端口 }
//USART初始化,包括波特率、数据位、停止位等~void USART_Config(USART_TypeDef* USARTx){   USART_InitTypeDef  USART_InitStructure;
   USART_InitStructure.USART_BaudRate = 9600;                        //速率9600bps   USART_InitStructure.USART_WordLength = USART_WordLength_8b;        //数据位8位   USART_InitStructure.USART_StopBits = USART_StopBits_1;            //停止位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;                    //收发模式
   /* Configure USART1 */   USART_Init(USARTx, &USART_InitStructure);                            //配置串口参数函数
   /* Enable the USART1 */   USART_Cmd(USART1, ENABLE);    }
void USART_SendChar(USART_TypeDef* USARTx,uint8_t data){     USART_SendData(USARTx,data);     while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
jacktianwang
1楼-- · 2019-07-15 02:18
xfliu780224 发表于 2016-4-22 09:07
char buf[]="#0P1600S750";      
      for(i=0;iUSART_SendChar(USART1,buf);
       }

这个手误,并不是主要的错误啊,我在想是不是USART_SendChar()这个函数,因为它发送的是两个字节的数据,而buf[]里面的数据都是一个字节的
meimengxing2014
2楼-- · 2019-07-15 05:46
 精彩回答 2  元偷偷看……
meimengxing2014
3楼-- · 2019-07-15 08:06
还有,你这写这么多代码配置时钟是配置的72M吧?好像MCU复位时默认的就是72M,不用再那么麻烦配置了,如果要配置成其他频率可以重新配置,直接打开要用的外设时钟就可以了
bb80777
4楼-- · 2019-07-15 10:48
进入调试模式,单步执行,看哪里和理想中的情况不一样
HARRY007
5楼-- · 2019-07-15 15:53
meimengxing2014 发表于 2016-4-23 19:33
还有,你这写这么多代码配置时钟是配置的72M吧?好像MCU复位时默认的就是72M,不用再那么麻烦配置了,如果要配置成其他频率可以重新配置,直接打开要用的外设时钟就可以了

代码没看,不过系统时钟肯定不用配置了,在启动代码中已经配置过了,宏定义的地方选择72MHZ可以了。3.5的库是这样的,嘿嘿。其余外设时钟自己再有选择的开~
meimengxing2014
6楼-- · 2019-07-15 18:07
HARRY007 发表于 2016-4-26 11:36
代码没看,不过系统时钟肯定不用配置了,在启动代码中已经配置过了,宏定义的地方选择72MHZ可以了。3.5的库是这样的,嘿嘿。其余外设时钟自己再有选择的开~

恩,是的,要改为其他频率直接改红定义就好

一周热门 更多>