2017-04-18 2:07 PM
Hi Forum,
I'm using the stm32f091, but when I enable the USART3 interrupt, the system hard faults. I already use USARTS1 and 2 without any problem. Not sure what else is required, so I'd be grateful for some assistance. One thing I;d like to know is how do you distinguish between interrupts from USARTS3 up to USART8.
Kind Regards
Bob
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; // Enable GPIOC clock RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); // Enable USART3 APB clock RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); // Connect pin to Periph GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_1); // USART3 TX GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_1); // USART3 RX // Configure pins as AF pushpull GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; 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_DOWN; GPIO_Init(GPIOC, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; 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(USART3, &USART_InitStructure); USART_Cmd(USART3, ENABLE); // Enable the COM3 Receive interrupt: this interrupt is generated when the// COM3 receive data register is not empty USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);// USART3 IRQ Channel configuration
NVIC_InitStructure.NVIC_IRQChannel = USART3_8_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);2017-04-18 3:23 PM
You check the status registers of the USART you plan to service.
2017-04-18 4:17 PM
Fair enough regarding the usart article status register but any idea why the hard fault occurs.
Bob
2017-04-18 6:25 PM
Make sure the ISR's name matches that in the vector table, typically located with startup code.
JW
2017-04-18 7:17 PM
Are you sure it is getting a Hard Fault, and not just entering the Default Handler, which is also a while(1) loop?
Check the naming of your IRQHandler, and that it matches, and links properly with the entry in the Vector Table.
2017-04-19 5:38 AM
Thanks very much. The interrupt was missing from the vector table. Adding it fixed the issue. Once again many thanks to the forum.
Kind Regards
Bob
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.