完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include "STM32f10x.h"
void RCC_Configuration(void); void USATR_Configuration(uint32_t USART_BaudRate); void GPIO_Configuration(void); void NVIC_Configuration(void); void Delay(vu32 times); int main(void) { RCC_Configuration(); GPIO_Configuration(); USATR_Configuration(115200); NVIC_Configuration(); GPIO_SetBits(GPIOA,GPIO_Pin_8); GPIO_SetBits(GPIOD,GPIO_Pin_2); USART_ClearFlag(USART1,USART_FLAG_TC); while(1) { } } void RCC_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //串口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD,ENABLE); //GPIO时钟 } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; //LED0初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1初始化 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD; GPIO_Init(GPIOD,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10为RXD,初始化 开发板上的RXD和TXD连接 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA9为TXD,初始化 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); } void USATR_Configuration( uint32_t USART_BaudRate) { USART_InitTypeDef USART_InitStructure; //串口初始化 USART_InitStructure.USART_BaudRate = USART_BaudRate; 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_Tx | USART_Mode_Rx; USART_Init(USART1,&USART_InitStructure); USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //接收中断 USART_Cmd(USART1,ENABLE); //打开串口 } void NVIC_Configuration(void) //中断嵌套向量 { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 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); } 这是stm32f10x_it.c中的中断 void HardFault_Handler(void) { while (1) { } } void USART1_IRQHandler(void) { char RX_Flag; char RX_Data; USART_GetFlagStatus(USART1,USART_FLAG_RXNE); //接收数据非空 RX_Flag=USART_GetFlagStatus(USART1,USART_FLAG_RXNE); if(RX_Flag==SET) { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志 RX_Data=USART_ReceiveData(USART1); USART_SendData(USART1,RX_Data); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); GPIO_ResetBits(GPIOD,GPIO_Pin_2); //LED点亮 } } 我想实现用串口调试工具发送"hello",开发板给串口调试工具也发送"hello" 发送4个长度以内的字符可以正常发送,发送5个长度的字符串,则不能正常发送 如:串口调试工具只能发送六个“hello”,再点击发送就没有数据返回,好像是缓存不够?还是数据丢失? |
|
相关推荐
4个回答
|
|
将中断函数里的
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); 改为 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); 就可以 我在串口初始化打开的是接收中断 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //接收中断 那用TXE和TC有什么区别 |
|
|
|
|
|
|
|
我收回我的话,嗯,我再看看。
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1737 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1606 浏览 1 评论
1046 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
720 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1663 浏览 2 评论
1920浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
708浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
557浏览 3评论
582浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
541浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-16 12:54 , Processed in 0.856989 second(s), Total 85, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号