初级会员
积分 56
金钱 56
注册时间 2016-3-29
在线时间 8 小时
2 金钱
如题,我在用精英板做开发时,发现串口设计比较奇怪,如图:
这个USART1串口,开发板的文件上面显示PA10是USART1的接收引脚(RX), PA9则是发送引脚(TX), 但是这两个I/O口下面又有一个TX和RX,这让我很是不理解这个怎么用. 而且还有跳线帽封着,我不知道去掉跳线帽后是不是就不能正常使用USART1串口了。总之我的程序在往USART1口输送数据时,电机驱动是没有反应的,而且示波器也会显示一直是4.88V(拔掉2个跳线帽,并且检测TX和RX)。附上我的代码,比较简单,可是就是无法驱动电机(电机驱动的特性就是往里边输入特定地址信息和指令等就能够相应驱动电机运动)。希望有人可以指教是什么地方出现了问题。
void Motor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //Structure for GPIO Initialize
USART_InitTypeDef USART_InitStructure; //Structure for USART Initialize
NVIC_InitTypeDef NVIC_InitStructure; //Structure for NVIC
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//Enable GPIOB;
//Set up parameter for GPOIA.9 as output
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//Set up parameter for GPIOA.10 as input
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//Usart Initialize ′Ë′|»ù±¾è«ÅìÕÕ3-Dû½ã
USART_InitStructure.USART_BaudRate = 9600;//ò»°ãéèÖÃÎa9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_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;
USART_Init(USART1,&USART_InitStructure);
//Enable Interupt
//NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
//NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
//NVIC_Init(&NVIC_InitStructure);
//Start Interupt
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
//Enable the USART
USART_Cmd(USART1,ENABLE);
//Send data to USART1---Set Minium Voltage
USART_SendData(USART1,128);
USART_SendData(USART1,2);
USART_SendData(USART1,25);
USART_SendData(USART1,(128+2+25)&0x7F);
//Send data to USART1---Set Maximum Voltage
USART_SendData(USART1,128);
USART_SendData(USART1,3);
USART_SendData(USART1,144);
USART_SendData(USART1,(128+3+144)&0x7F);
}
void Setdriver(int Mode,int Commend,int Bytevalue)
{
int Checksum;
USART_RX_STA=0;
Checksum=(Mode+Commend+Bytevalue)&0x7F;
USART_SendData(USART1,Mode);
USART_SendData(USART1,Commend);
USART_SendData(USART1,Bytevalue);
USART_SendData(USART1,Checksum);
if(USART_GetITStatus(USART1,USART_IT_TC))
{
LED_Init();
delay_ms(500);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
delay_ms(500);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);
}
else
{
LED_Init();
delay_ms(500);
//Do nothing
}
}
int main()
{
Motor_Init();
delay_init();
LED_Init();
//Send data to USART1---Set Maximum Voltage
while(1)
{
Setdriver(128,3,144);
//if(USART_GetFlagStatus(USART1,USART_FLAG_TC))
{LED0=0;
LED1=1;
delay_ms(300); //Ñóê±300ms
LED0=1;
LED1=0;
delay_ms(300); //Ñóê±300ms
// USART_FLAG_TC
}
//6else
{
}
}
我来回答