RT-Thread使用UART2的问题,怎么会进入OTG的中断啊
因为UART1的管脚被占用了,所以使用UART2管脚,芯片是STM32103FRBT6,使用PA2和PA3作为UART2的TX,RX。定义defined(STM32F10X_MD)
修改rtconfig.h
/* SECTION: Device System */
/* Using Device System */
#define RT_USING_DEVICE
#define RT_USING_UART2
修改uart.c
#if defined(STM32F10X_LD) || defined(STM32F10X_CL)
#define UART2_GPIO_TX GPIO_Pin_5
#define UART2_GPIO_RX GPIO_Pin_6
#define UART2_GPIO GPIOD
#define RCC_APBPeriph_UART2 RCC_APB1Periph_USART2
#else /* for STM32F10X_HD */
/* USART2_REMAP = 0 */
#define UART2_GPIO_TX GPIO_Pin_2
#define UART2_GPIO_RX GPIO_Pin_3
#define UART2_GPIO GPIOA
#define RCC_APBPeriph_UART2 RCC_APB1Periph_USART2
#define UART2_TX_DMA DMA1_Channel7
#define UART2_RX_DMA DMA1_Channel6
#endif
#ifdef RT_USING_UART2
#if (defined(STM32F10X_LD) || defined(STM32F10X_CL))
/* Enable AFIO and GPIOD clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD, ENABLE);
/* Enable the USART2 Pins Software Remapping */
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
#else
/* Enable AFIO and GPIOA clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);
#endif
仿真时怎么会进入
OTG_FS_IRQHandler
B .
ENDP
ALIGN
就死掉了,不明白怎么会进入OTG的中断,是不是还有地方需要修改啊,使用UART1就没有问题,弄了一天了也没发现问题,哪位使用过UART2,可以发个程序看看吗,多谢了 并不是进了OTG中断,而是N个中断共用一个服务程序就是while(1) 汇编:B .
之所以你认为是OTG是因为: OTG在最后一行.
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
....................
DMA2_Channel5_IRQHandler
ETH_IRQHandler
ETH_WKUP_IRQHandler
CAN2_TX_IRQHandler
CAN2_RX0_IRQHandler
CAN2_RX1_IRQHandler
CAN2_SCE_IRQHandler
OTG_FS_IRQHandler
B .
103RB基本没有OTG.为什么RT-Thread的启动代码里面有OTG?
是因为STM32向下兼容性很好.所以.写一个通用的,全部适用.也就多占用几个字节而已.
原因: 你没有添加USART2的中断服务函数. 多谢aozima,还有点不明白的地方,UART2是采用轮询发送,DMA接收,PA3-RX我没有接,只接了PA2-TX,按理说不应该产生中断啊,所以就没有加接收中断服务函数,现在只是调试示例程序,没有使用finsh,只使用rt_kprintf()作为状态输出。 搞定了,自己太粗心了,又查了边硬件,发现是连焊了,不好意思,耽误各位时间了。 现象越奇特,错误越低级,这是我 的经验
页:
[1]