下面写的是通过
STM32串口发送舵机命令给舵机驱动器,为什么不能实现呢?作为新人,希望大家多多指教,非常感谢!!!#include"stdio.h"#include"stm32f10x_lib.h"#include"stdint.h"
void RCC_Configura
tion(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);}
这个手误,并不是主要的错误啊,我在想是不是USART_SendChar()这个函数,因为它发送的是两个字节的数据,而buf[]里面的数据都是一个字节的
代码没看,不过系统时钟肯定不用配置了,在启动代码中已经配置过了,宏定义的地方选择72MHZ可以了。3.5的库是这样的,嘿嘿。其余外设时钟自己再有选择的开~
恩,是的,要改为其他频率直接改红定义就好
一周热门 更多>