1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
STM32串口通信
流程 (简单的发送数据)
void NVIC_Config_USART() { NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(& NVIC_InitStruct); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); } void Init_UART() { GPIO_InitTypeDef GPIOInitstruct; USART_InitTypeDef USART_InitStruct; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE); //开启串口对应的GPIO时钟 RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1,ENABLE);//开启串口1的时钟 :Tx-A9 RX-A10,开 GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP; //设置串口GPIO模式(有两个) GPIOInitstruct.GPIO_Pin = GPIO_Pin_9; GPIOInitstruct.GPIO_Speed = GPIO_Speed_50MHz; //Tx GPIO配置 GPIO_Init(GPIOA,&GPIOInitstruct); //设置TX为推免输出模式 GPIOInitstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIOInitstruct.GPIO_Pin = GPIO_Pin_10; GPIOInitstruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIOInitstruct); //设置RX GPIO配置 USART_InitStruct.USART_BaudRate = 115200; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_Init(USART1,&USART_InitStruct); //配置好串口 NVIC_Config_USART(); //配置NVIC USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); // 使能接收中断 USART_Cmd(USART1, ENABLE); //开启串口 //串口接受,会引发中断 } void UART_SendByte(USART_TypeDef * USARTx, uint8_t dat) { USART_SendData(USART1, dat); while((USART_GetFlagStatus(USART1,USART_FLAG_TC))== RESET); //发送缓冲区为空,状态置1, 写入一个数据,状态置0,灯数据发送借书,这个状态寄存器就变成1 //实现了串口发送一个字节 } void UART_SendString(USART_TypeDef * USARTx, char* string) { char * str = string;//指向string while(*str) //只要str不为0,表示字符串还没有结束 { UART_SendByte(USARTx, *str); str++; } } void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 推挽输出 GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高 } 中断函数: void USART1_IRQHandler(void) { uint16_t temp; delay_init(); if(USART_GetITStatus(USART1,USART_IT_RXNE)) { GPIO_ResetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高 temp = USART_ReceiveData(USART1); USART_SendData(USART1,temp); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == SET); } } 注意事项
以下是详细代码:
今天这个串口中断真的写了很久,最开始只有程序中的发送代码,但是都不能使我设置的GPIO的灯亮,原因是因为我的GPIO使能时钟函数写错了)(PS:细节决定成败) 第二步进阶: 发送的数据让串口返回 : 用到了NVIC中断函数 NVIC函数的步骤: 1.NVIC 初始化 NVIC_Init() 2.中断优先级 NVIC_PriorityGroupConfig 3. 使能(开启)接收中断USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:32 , Processed in 1.067187 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号