大学生
最后登录1970-1-1
在线时间 小时
注册时间2016-8-30
|
刚开始使用STM32,用开发板带的例程,发现中断接收时,接收的数据无法放入数组中,求大神指导。具体情况看程序串口配置程序,我没有改动
void Debug_USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_AHB1PeriphClockCmd(DEBUG_USART_RX_GPIO_CLK|DEBUG_USART_TX_GPIO_CLK,ENABLE);
/* ê1Äü USART ê±Öó */
RCC_APB2PeriphClockCmd(DEBUG_USART_CLK, ENABLE);
/* GPIO3õê¼»ˉ */
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* ÅäÖÃTxòy½ÅÎa¸′óÃ1|Äü */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_PIN ;
GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
/* ÅäÖÃRxòy½ÅÎa¸′óÃ1|Äü */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_PIN;
GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
/* ᬽó PXx μ½ USARTx_Tx*/
GPIO_PinAFConfig(DEBUG_USART_RX_GPIO_PORT,DEBUG_USART_RX_SOURCE,DEBUG_USART_RX_AF);
/* ᬽó PXx μ½ USARTx__Rx*/
GPIO_PinAFConfig(DEBUG_USART_TX_GPIO_PORT,DEBUG_USART_TX_SOURCE,DEBUG_USART_TX_AF);
/* ÅäÖÃ′®DEBUG_USART Ä£ê½ */
/* 2¨ìØÂêéèÖãoDEBUG_USART_BAUDRATE */
USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
/* ×Ö3¤(êy¾Yλ+D£Ñéλ)£o8 */
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
/* í£Ö1λ£o1¸öí£Ö1λ */
USART_InitStructure.USART_StopBits = USART_StopBits_1;
/* D£ÑéλѡÔñ£o2»ê1óÃD£Ñé */
USART_InitStructure.USART_Parity = USART_Parity_No;
/* ó2¼tá÷¿ØÖÆ£o2»ê1óÃó2¼tá÷ */
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
/* USARTÄ£꽿ØÖÆ£oí¬ê±ê1Äü½óêÕoí·¢Ëí */
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* íê3éUSART3õê¼»ˉÅäÖÃ */
USART_Init(DEBUG_USART, &USART_InitStructure);
/* Ƕì×Ïòá¿ÖD¶Ï¿ØÖÆÆ÷NVICÅäÖà */
NVIC_Configuration();
/* ê1Äü′®¿ú½óêÕÖD¶Ï */
USART_ITConfig(DEBUG_USART, USART_IT_RXNE, ENABLE);
/* ê1Äü′®¿ú */
USART_Cmd(DEBUG_USART, ENABLE);
}
中断接收程序,将我发送的数据存入数组a中,并将a[0]中的数据回传到上位机
void DEBUG_USART_IRQHandler(void)
{
uint8_t ucTemp;
if(USART_GetITStatus(DEBUG_USART,USART_IT_RXNE)!=RESET)
{
USART_ClearITPendingBit(DEBUG_USART,USART_IT_RXNE);//Çå3yÖD¶Ï±ê־λ
ucTemp = USART_ReceiveData( DEBUG_USART );
//USART_SendData(DEBUG_USART,ucTemp);
a[i]= ucTemp;
USART_SendData(DEBUG_USART,a[0]);
//Usart_SendByte(DEBUG_USART,a[0]);
i++;
if(i==7)
{
//USART_SendData(DEBUG_USART,a[3]);
i=0;
}
}
}
当我发送10 11 12 13 14 15 16 17这些数据时,收到的是77777711111114444444 11111113333333 0000000 1111111777777711111114444444 这种类似乱码的东西
求大神看下程序,谢谢!
另外,如果是接到一个数据马上发送,程序是对的,一旦将数据保存后再发送就不行。
|
|