本帖最后由 zyisme 于 2018-12-28 15:36 编辑
我使用的是stm32 l152cct6 开发板 编译环境为keil5
现在的问题是 我使用串口调试助手 发送数据到开发板 开发板接不到 开发板发送数据串口调试助手也看不到
希望有遇到过此类问题的 可以指点一下 或者指导下我该从哪方面进行查找原因
代码如下
- void USART1_Init(u32 baud){
- //结构体变量定义
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);//使能端口时钟
- RCC_APB2PeriphClockLPModeCmd(RCC_APB2Periph_USART1,ENABLE);//使能串口时钟
-
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
-
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
-
- GPIO_InitStructure.GPIO_Pin= GPIO_Pin_9;//TX
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_40MHz;
- GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin= GPIO_Pin_10;//RX
- //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
- //GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
- //GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
-
- USART_InitStructure.USART_BaudRate=baud;
- USART_InitStructure.USART_WordLength=USART_WordLength_8b;
- USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
- USART_InitStructure.USART_Parity=USART_Parity_No;
- USART_InitStructure.USART_StopBits=USART_StopBits_1;
- USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
- USART_Init(USART1,&USART_InitStructure);
-
- NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;// 中断优先级 抢占式和相应式
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
- NVIC_Init(&NVIC_InitStructure);
-
- USART_Cmd(USART1,ENABLE);
- USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //使用中断方式接受数据
- //USART_ITConfig(USART1,USART_IT_RXNE,DISABLE); //如果使用DISABLE则使用查询接受方式接受数据
- USART_ClearFlag(USART1,USART_FLAG_TC);
-
- }
- /*
- ********************************************************************************
- * 函 数 名: USART1_IRQHandler
- * 功能说明: USART1 中断处理函数 函数名不可变
- * 形 参: 无
- * 返 回 值: 无
- ********************************************************************************
- */
- void USART1_IRQHandler(){
- u8 r=0;
- if(USART_GetITStatus(USART1,USART_IT_RXNE)){
-
- r=USART_ReceiveData(USART1);
-
- }
- USART_SendData(USART1,r);
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET)
- ;
- USART_ClearFlag(USART1,USART_FLAG_TC);
- }
复制代码
|
1: stml152 ,GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); datasheet 是否是 GPIO_AF_USART1 , AF 應該有好幾個復用功能
2: void USART1_IRQHandler(void) , 可以直接這樣寫 USART_SendData(USART1,USART_ReceiveData(USART1)); 試看看
3: 用事波器鉤訊號(鉤PC 出來的Tx , uart 的 Rx) , 用串口送一個 byte, 看有無訊號 , 有訊號代表串口有送出來, 但 程式沒進中斷接收 , 就要看程式哪裡設定有問題
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
二,pc发送数据,用示波器看单片机的RX是否有波形。如果有再继续看软件。如果没有检查硬件。
三,尽量不要再中断处理程序写while,尝试把数据搬运出来。在主循环里面发送。(可以进调试看一下是不是卡死到那个中断处理程序了)
STM32L152CCT6好像没有开发板。楼主是如何与上位机进行USART连接的?先把硬件贴出来看看。
如果是64PIN的板子是连接PA2,PA3,才有虚拟串口可用
谢谢大家