完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、准备工作
本文所使用的硬件设备为野火的指南者开发板,利用商家提供的例程完成串口的中断通信。
**我们这次所使用的是串口中断收发的例程,所以我们在主程序中进行循环间隔地输出helloworld,控制收发的部分需要在串口中断服务函数中进行修改,野火例程的中断服务函数在stm32f10x_it.c中。
int i=0;int ch; uint8_t ucTemp[20]; void DEBUG_USART_IRQHandler(void) { if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET) //接收触发 { ucTemp = USART_ReceiveData(USART1); //接收缓存 } //接收完毕后,判断是否为停止标志 if(ucTemp == '!'&&ucTemp[i-1] == '2'&&ucTemp[i-2] == '3'&&ucTemp[i-3] == 'm'&&ucTemp[i-4] == 't'&&ucTemp[i-5] == 's' &&ucTemp[i-6] == ' '&&ucTemp[i-7] == 'p'&&ucTemp[i-8] == 'o'&&ucTemp[i-9] == 't'&&ucTemp[i-10] == 's') { printf("停止发送n"); for(i=0;i<20;i++) { ucTemp=0; //清空接收缓存 } while(1) //停止发送后一直循环,等待继续发送标志 { if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET) //接收到发送标志 { ch = USART_ReceiveData(USART1); //将接收到的值赋给ch } if(ch == '1') //如果接受到`1`,继续发送 { ch=0; printf("继续发送n"); break; } } } i++; } 主程序 int main(void) { int m,n; USART_Config(); //串口初始化 while(1) { printf("helloworldn"); for(m=0;m<10000;m++) for(n=0;n<500;n++); } } 编译下载 串口通信使用u***线接板载的u***转串口接口,电脑端使用串口助手作为上位机 注意使用u***线做串口通信要将A9和A10的跳线帽装好 三、效果展示 |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9050 浏览 16 评论
4085 浏览 18 评论
1171浏览 3评论
602浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
594浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2331浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 08:37 , Processed in 1.330052 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号