使用STM32f030C8T6 進行串口的編程,出現了一個問題,就是程式一啟動就會進入接收中斷函式,然后后面就進不去了,這可能會是什么原因,求大佬指導
uj5u.com熱心網友回復:
沒用過f0系列,1:要不要清理中斷標志
2:是不是在中斷里死偱環了
3:中斷處理時,是否失能了中斷
uj5u.com熱心網友回復:
樓主應該貼一段代碼,中斷服務函式,不然大家怎找問題uj5u.com熱心網友回復:
斷點看一下。我覺得還有一個可能你的時鐘慢了,然后再進串口的時候,資料已經傳完丟失了。
uj5u.com熱心網友回復:
//開時鐘RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//GPIO初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
//串口初始化
USART_InitStructure.USART_BaudRate = 19200;
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);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
//串口中斷配置
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
串口中斷
void USART1_IRQHandler(void)
{
USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
}
}
stm32f0x 拿去用
uj5u.com熱心網友回復:
檢查終端處理程式uj5u.com熱心網友回復:
void NVIC_Configuration(void){
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//嵌套優先級分組為 4 , 注:SysTick的優先級默認=15
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
uj5u.com熱心網友回復:
STM32F103的USART2串口void USART2_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// config USART2 clock
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
// Configure USART2 Tx (PA.2) as alternate function push-pull
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); // PA.2
// Configure USART2 Rx (PA.3) as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure); // PA.3
// USART2 mode config
USART_InitStructure.USART_BaudRate = 115200;
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(USART2, &USART_InitStructure);
//CPU的小缺陷:串口配置好,如果直接Send,則第1個位元組發送不出去如下陳述句解決第1個位元組無法正確發送出去的問題
USART_ClearFlag(USART2, USART_FLAG_TC); //清發送完成標志,Transmission Complete flag
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_Cmd(USART2, ENABLE);
}
uj5u.com熱心網友回復:
void USART2_IRQHandler(void){
uint8_t ch;
if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
ch = USART_ReceiveData(USART2);
}
else if (USART_GetITStatus(USART2, USART_IT_TC) != RESET)
{
USART_ClearFlag(USART2 , USART_FLAG_TC);
if (MB_USART2.sendPosi < MB_USART2.sendCount)
{
USART_SendData(USART2 , MB_USART2.send_buffer[MB_USART2.sendPosi++]);
}
else
{
USART2_RS485_RECIVE_enable();
USART_ITConfig(USART2 , USART_IT_TC , DISABLE);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/104198.html
標籤:單片機/工控
上一篇:STM32F103ZET6復位之后,滴答定時器延時函式延時時間不一致
下一篇:萌新求助關于 松下plc方面的
