我想通过stm32F4的usart3和us100超声波模块进行通信,发送起始信号和接收数据,但是起始信号0X55始终不能发送给模块,TXE位也一直不置位。
//我的串口初始化
void uart_sensor_init(u32 bound)
{
GPIO_InitTypeDef GPIO_Initdefined;
USART_InitTypeDef USART_Initdefined;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
GPIO_Init(GPIOB,&GPIO_Initdefined);
GPIO_Initdefined.GPIO_Mode=GPIO_Mode_AF;
GPIO_Initdefined.GPIO_OType=GPIO_OType_PP;
GPIO_Initdefined.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_11;
GPIO_Initdefined.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Initdefined.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3);
USART_Init(USART3,&USART_Initdefined);
USART_Initdefined.USART_BaudRate=bound;
USART_Initdefined.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_Initdefined.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Initdefined.USART_Parity=USART_Parity_No;
USART_Initdefined.USART_StopBits=USART_StopBits_1;
USART_Initdefined.USART_WordLength=USART_WordLength_8b;
USART_Cmd(USART3,ENABLE);
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
}
void USART3_SendData(u8 data)
{
USART_SendData(USART2, data);
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);// 等待发送结束/////////////在这里始终过不去
USART_ClearFlag(USART2,USART_FLAG_TXE);
}
u8 USART3_ReadData(void)
{
u8 data;
if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE) != RESET) // 等待接收
{
data =USART_ReceiveData(USART2); // 读取接收到的数据
}
USART_ClearFlag(USART2,USART_FLAG_RXNE);
return data;
}
-------------------------------------------------------------------------------------------------------------------------------
分割线
-------------------------------------------------------------------------------------------------------------------------------
//我的主程序
u8 usart_data=0X55;
u16 usart_show;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //延时初始化
uart_init(115200); //串口初始化波特率为115200
LED_Init(); //初始化与LED连接的硬件接口
uart_sensor_init(9600);
while(1)
{
USART3_SendData(usart_data);
usart_show=USART3_ReadData();
USART_SendData(USART1, usart_show);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
delay_ms(100);
printf("
");//插入换行
}
}
硬件连接没问题,模块没问题,而且模块也不运行。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);/ 这一句错了
应该是while(!USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);/
一周热门 更多>