完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void Usart_Init(void)
{ //GPIO¶Ë¿ÚÉèÖà GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //DMA_InitTypeDef DMA_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_AHBPeriph_GPIOA, ENABLE); //ʹÄÜUSART1£¬GPIOAʱÖÓ USART_DeInit(USART1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1); //USART1_TX PA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10; //PA.9 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); //³õʼ»¯PA9 //USART ³õʼ»¯ÉèÖà USART_InitStructure.USART_BaudRate = 9600;//Ò»°ãÉèÖÃΪ9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ 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_ITConfig(USART1, USART_IT_IDLE, ENABLE);// //USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE); //DMA enable USART_Cmd(USART1, ENABLE); // //Usart1 NVIC ÅäÖà NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 1; //×ÓÓÅÏȼ¶3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀʹÄÜ NVIC_Init( NVIC_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷ } void USART1_IRQHandler(void) //´®¿Ú1ÖжϷþÎñ³ÌÐò { uint8_t Res; GPIO_ResetBits(GPIOA,GPIO_Pin_8); if(USART_GetiTStatus(USART1, USART_IT_RXNE) != RESET) //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ) { Res =USART_ReceiveData(USART1);//(USART1->DR); //¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý USART1_RX_BUF[len_usart1]=Res; len_usart1++; //LedShinning(); //GPIO_ResetBits(GPIOA,GPIO_Pin_8); //Receive_Done = 1; } if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET) //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ) { USART_ClearITPendingBit(USART1,USART_IT_IDLE); Receive_Done = 1; //LedShinning(); //GPIO_ResetBits(GPIOA,GPIO_Pin_8); } |
|
相关推荐
1个回答
|
|
可能的原因之一是中断优先级配置不正确,导致中断无法触发。可以通过以下步骤来解决:
1. 确保已经正确初始化了外设:GPIO和USART。检查相关的时钟使能以及GPIO和USART的配置是否正确。 2. 确保已经正确配置了USART中断向量表。在NVIC_INIT函数中,使用相应的优先级分组,启用USART相关的中断。 3. 检查是否在USART初始化函数中正确配置了USART的中断使能位USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE)。这里的USART_IT_RXNE表示使能接收寄存器非空中断,可以根据需要进行调整。 4. 确认在主循环中已经使用过相关的USART发送和接收函数,以触发USART中断。 5. 可以通过使用调试工具(如JTAG/SWD)来进行实时调试,观察中断是否被触发以及中断服务程序是否正常执行。 整体来说,需要检查并排除以下可能的原因:时钟、GPIO、USART的配置,中断优先级错误,中断使能配置错误,以及主循环中是否调用了相关的USART函数。同时,使用调试工具进行实时调试也可以帮助找到问题所在。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1685 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1588 浏览 1 评论
1013 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
706 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1631 浏览 2 评论
1893浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
679浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
538浏览 3评论
559浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
526浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-5 04:58 , Processed in 0.777969 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号