完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include <STM32f10x.h>
void RCC_Config(void); void GPIO_Config(void); void USART_Config(void); void NVIC_Config(void); int main(void) { RCC_Init(); GPIO_Config(); NVIC_Config(); USART_Config(); while(1); } void RCC_Init() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); } void GPIO_Config(void) { //configure USARTx_Tx as alternate function push-pull// GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); } void NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void USART_Config (void) { USART_InitTypeDef USART_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_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能串口的接收中断 USART_Cmd(USART1,ENABLE); USART_Init(USART1, &USART_InitStructure); } 串口中断服务程序 void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判断串口是否产生接收中断 { USART_SendData(USART1,USART_ReceiveData(USART1)); while (USART_GetFlagStatus (USART1,USART_FLAG_TXE)!=RESET);//判断是否发送成 USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中断标志位 } } |
|
相关推荐
4个回答
|
|
准确的说,你的程序只能先接收,然后把接收的字符发送到PC。你要主动发送的话,你要写发送函数啊,没见你的main函数里面有发送函数啊
|
|
|
|
你的程序是这么运行的:while(1){串口助手发数据到MCU-->进入接收中断执行中断服务程序-->把接收的数据发送到PC-->退出中断服务程序}
|
|
|
|
最好不要在中断里调用接受和发送的函数
|
|
|
|
一般不这么写,你在中断里面发送你收到的数据,不过照你这个串口窗口截图的意思,收发不是都有了么?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1129 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1075 浏览 2 评论
2175 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1269 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1693 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 07:49 , Processed in 1.422341 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号