完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
如题,网上找了个,然后可以运行。但是在单步调试时,怎么也无法进入中断里面去。 串口助手,Jlink,都有。用的MDK4.12. 请高手指点
|
|
相关推荐
9 个讨论
|
|
|
本帖最后由 爱我别走 于 2013-7-12 17:35 编辑
给贴一段代码,作用是可从串口调试助手接收任意多字节数据,然后将数据返回给串口调试助手。经过我实测可用。 希望对你有帮助。 /****************************************************** 文件名 :main.c 功能 : 从串口调试助手接收到任意字节数据,然后返回给串口调试助手。 备注 : 串口调试命令 MODE COM4 9600,0,8,1 ASSIGN COM4 ******************************************************/ #include "stm32f10x.h" #include "Uart.h" /*---------------------------------------------------- 函数名 :main 功能 :主函数 调用 :系统 输入参数: 输出参数: ------------------------------------------------------*/ int main(void) { //串口1初始化 InitUart1(); while(1) { //串口数据处理 Uart1Handle(); } } /******************************************************** 文件名 :Uart.c 功能 : 串口(Uart1)驱动 备注 : 串口调试命令 MODE COM4 9600,0,8,1 ASSIGN COM4 ***********************************************************/ #include"Uart.h" /*------------------------------------------- 串口缓存 -------------------------------------------*/ struct Uart { uint8_t UartTemp[MAX_STACK];//缓存 uint8_t Count; //数据计数 uint32_t TimeOut; //超时计数 uint8_t ReFlag; //接收状态 }UartStack; /*------------------------------------------- 串口1发送单字节 -------------------------------------------*/ void Uart1SendByte(uint8_t ch) { USART_SendData(USART1, ch); while (!(USART1->SR & USART_FLAG_TXE)); } /*------------------------------------------- 串口1发送多字节 -------------------------------------------*/ void Uart1SendMultiByte(uint8_t *pchar,uint8_t len) { while(len--) { USART_SendData(USART1, *pchar++); while (!(USART1->SR & USART_FLAG_TXE)); } } /*------------------------------------------- NVIC配置 --------------------------------------------*/ void NVIC_Configuration1(void) { NVIC_InitTypeDef NVIC_InitStructure; /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); /* Enable the USART1 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /*------------------------------------------- 串口1初始化 --------------------------------------------*/ void InitUart1(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; /* config USART2 clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); NVIC_Configuration1(); /* USART2 GPIO config */ /* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART1 Rx (PA.10) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /* USART2 mode config */ 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(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE); } /*------------------------------------------- 串口1接收中断 --------------------------------------------*/ void Isr_Uart1(void) { //处理接收到的数据 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { /* Clear the USART1 Receive interrupt */ USART_ClearITPendingBit(USART1, USART_IT_RXNE); UartStack.UartTemp[UartStack.Count++]=USART_ReceiveData(USART1); if(UartStack.Count==MAX_STACK)UartStack.Count=MAX_STACK; UartStack.TimeOut=0; //超时计数清零 UartStack.ReFlag=1; //处于接收状态 } } /*------------------------------------------- 串口数据处理 --------------------------------------------*/ void Uart1Handle(void) { UartStack.TimeOut++; //超时计数 if(UartStack.TimeOut >= TIME_OUT && UartStack.ReFlag == 1 ) { Uart1SendMultiByte(UartStack.UartTemp,UartStack.Count); memset(&UartStack,0,sizeof(struct Uart)); UartStack.TimeOut=0; //超时计数清零 UartStack.ReFlag =0; //处于空闲状态 } } /********************************************** 文件名 :Uart.h 功能 : 串口(Uart1)驱动 备注 : 串口调试命令 MODE COM4 9600,0,8,1 ASSIGN COM4 **********************************************/ #ifndef _UART2_H_ #define _UART2_H_ #include "stm32f10x.h" #include #define MAX_STACK 100 //串口缓存大小 #define TIME_OUT 100 //超时 //串口1初始化 void InitUart1(void); //串口1接收中断 void Isr_Uart1(void); //串口数据处理 void Uart1Handle(void); #endif 备注:需将void Isr_Uart1(void)添加到stm32f10x_it.c中。格式如下: //串口1中断 void USART1_IRQHandler(void) { Isr_Uart1(); } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
很牛啊,真心羡慕你们啊!
|
|
|
|
|
|
|
|
|
大神,能把工程文件贴出来嘛?
|
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 12:59 , Processed in 0.985865 second(s), Total 63, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4954