stm32 串口发送数组 为啥串口发送不出去我打印的四个数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32 串口发送数组 为啥串口发送不出去我打印的四个数字相关的知识,希望对你有一定的参考价值。

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "rtc.h"
#include "stdlib.h"
u8 flag;
u16 password[128];
int main(void)

delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
while(1)

if(flag==1)

flag=0;
USART_SendData(USART1,password[3]);

printf("现在时间是%d年%d月%d日%d时%d分%d秒\n",
calendar.w_year,calendar.w_month,calendar.w_date,
calendar.hour,calendar.min,calendar.sec);
delay_ms(1000);
RTC_Get();



void USART1_IRQHandler(void)

u8 i,Res;

#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收中断(接收到的数据必须是0x0d 0x0a结尾)

Res=USART_ReceiveData(USART1);//(USART1->DR);读取接收到的数据
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
password[i] = Res;
i++;
if(i>4)

i=0;
flag=1;




还是无法在串口上打印出数据

参考技术A USART_SendData(USART1,password[3]);

这个有问题啊,应该是password数组里的所有
USART_SendData(USART1,password[0]);
USART_SendData(USART1,password[1]);
USART_SendData(USART1,password[2]);
USART_SendData(USART1,password[3]);追问

那我怎么把全部成员都发送出去

哦哦 明白你的意思了 我等等试试看

我还是不能在串口上打印出数组内的数据

追答

连上仿真器,查看下能进不进usart的接收中断?
若能见,把password数组放在watch中查看数组有没有数字的变化?
RTC_Get();函数有没有把串口接收到的数据转化为RTC时间?
一步一步的查下看看问题出在哪里

本回答被提问者采纳

STM32单片机通过USART1接收到数据后,怎么把接收到的数据通过单片机的CAN口发送出去啊?

先编写usart1的接收程序,把接收到的数据存在数组里面,再编写can的发送程序,把数组的数据通过can发送出去,难点是usart的初始化,中断接收和can初始化,其实很简单的。先调好串口中断接收,再调试can发送。 参考技术A 这个可以把收到的数据保存在存储区域或数组中,然后通过CAN发送程序通过CAN端口发送出去。

以上是关于stm32 串口发送数组 为啥串口发送不出去我打印的四个数字的主要内容,如果未能解决你的问题,请参考以下文章

STM32 串口为啥只能接收发送的部分数据

STM32单片机通过USART1接收到数据后,怎么把接收到的数据通过单片机的CAN口发送出去啊?

stm32 开启接收中断 PC 发送两次 为啥串口只接收到一次

stm32 串口发送数组 cpu可以工作吗

STM32中串口DMA实验里,为啥选择通道4(选择串口的发送端,而不是接收端)?

STM32串口打印乱码