STM32串口发送整组数组

STM32串口发送整组数组,第1张

Stringprototypesub = function (n) {

var r = /[^\x00-\xff]/g;

if (thisreplace(r, "mm")length <= n) return this;

// n = n - 3;

var m = Mathfloor(n / 2);

for (var i = m; i < thislength; i++) {

if (thissubstr(0, i)replace(r, "mm")length >= n) {

return thissubstr(0, i);

}

说起来挺麻烦了,建议你看看《Visual C++/Turbo C串口通信编程实践(第2版)》2007年9月第2版。会对你有些帮助。

如果你是用C++编程对串口进行通信的话,肯定要使用API函数,其中要用到创建线程和串口通信2种函数。

用二维数组char Arri[m][n]来说明,发送二维数组:如果你的长度不大的话,其实就是你有m个n个长的char型数据,可以

for(int i = 0; i < m; i++) //这只是举例,真正传输时要看具体的情况

{

WriteFile(Arri[i]);

}

来完成。

你用一个数组变量(也就是开辟一个接收缓冲区)就OK了如:

#include<reg51h>

#define uchar unsigned char

uchar buf[16],num;

void ser_isr() interrupt 4

{

if(RI)

{

RI=0;

buf[num]=SBUF;

num++;

num&=0x0f;

}

}

main()

{

TMOD=0x20;

SCON=0x50;

TH1=TL1=0xfd;

TR1=1;

ES=1;

EA=1;

while(1);

}

avr单片机的缓冲区串口收发,别的单片机 你改一下寄存器就行

//芯片:mega16

#include

#define F 8000000

#define BAUD 9600

#define u8 unsigned char

#define u16 unsigned int

#define u32 unsigned long

void usart_init(void);

char get_char(void);

void put_char(char c);

#define RX_SIZE 20

#define TX_SIZE 20

char rx[RX_SIZE];

u8 rx_head,rx_rear,rx_overflow;

char tx[TX_SIZE];

u8 tx_head,tx_rear,tx_overflow;

int main(void)

{

usart_init();

put_char( 'a' );

put_char( 'b' );

put_char( 'c' );

put_char( 'd' );

put_char( 'e' );

while(1)

put_char(get_char());

}

void usart_init(void)

{

UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);//接收结束中断使能,发送结束中断使能,接收允许,发送允许

UCSRC = 0X86; //选择UCSRC,异步模式,无校验,1位停止位,8位数据位

UBRRH = (F/16/BAUD - 1)>>8; //选择UBRRH,设置波特率

UBRRL = (unsigned char)(F/16/BAUD - 1);

rx_head = 0;

rx_rear = 0;

rx_overflow = 0;

tx_head = 0;

tx_rear = 0;

tx_overflow = 0;

asm("sei");

}

char get_char(void)

{

char c;

while(rx_head == rx_rear);//如果接收缓冲区空,则一直等待

c = rx[rx_head++]; //从头取数据,头+1

if(rx_head >= RX_SIZE ) rx_head = 0;//若头超出缓冲区末端,移至缓冲区开端

return c;

}

void put_char(char c)

{

if(tx_head != tx_rear || !( UCSRA&(1<<UDRE) ) )//若 发送缓冲区非空 或 发送寄存器非空

{

tx[tx_rear++] = c;//将c移至缓冲区尾,尾+1

if(tx_rear >= TX_SIZE ) tx_rear = 0;//若尾超出缓冲区末端,移至缓冲区开端

if(tx_rear == tx_head)//若尾前进到头,说明缓冲区满

{

tx_overflow = 1;//缓冲区溢出 (事实上刚好不溢出,这里为了编程方便,牺牲一个字节并记为溢出)

tx_head++;//牺牲最早接收的那个字节

}

}

else

UDR = c;//直接发送

}

#pragma vector = USART_RXC_vect

__interrupt void receive(void)

{

rx[rx_rear++] = UDR;

if(rx_rear >= RX_SIZE ) rx_rear = 0;//若尾超出缓冲区末端,移至缓冲区开端

if(rx_rear == rx_head)//若尾前进到头,说明缓冲区满

{

rx_overflow = 1;//缓冲区溢出 (事实上刚好不溢出,这里为了编程方便,牺牲一个字节并记为溢出)

rx_head++;//牺牲最早接收的那个字节

}

}

#pragma vector = USART_TXC_vect

__interrupt void transmit(void)

{

if(tx_head != tx_rear)//如果发送缓冲区非空

{

UDR = tx[tx_head++];//发送头数据,头+1

if(tx_head >= TX_SIZE) tx_head = 0;//若头超出缓冲区末端,移至缓冲区开端

}

}

做一个整形到ASCII的转换函数。如果你要发送的数据最大值可以确定,可以根据最大值定义一个ASCII数组,数组的每一个单元存放整形数据的一位。

发送前先对发送整形数组里的单元转换成ASCII数组,然后再按照通用的发送函数进行发送。

void InttoChar (uint IntNumber)

//---------------------------------------------------------

// Name: void InttoChar (int IntNumber)

// Func: Translate integer to ASCII charactor array

// Char: IntNumber number to be translated to ASCII charactor

//---------------------------------------------------------

{

if (IntNumber < 10)

{

AsciiArray[0] = IntNumber + 0x30;

AsciiArray[1] = 0x20;

AsciiArray[2] = 0x20;

AsciiArray[3] = 0x20;

AsciiArray[4] = 0x20;

return;

}

if (IntNumber < 100)

{

AsciiArray[0] = IntNumber / 10 + 0x30;

AsciiArray[1] = IntNumber % 10 + 0x30;

AsciiArray[2] = 0x20;

AsciiArray[3] = 0x20;

AsciiArray[4] = 0x20;

return;

}

if (IntNumber < 1000)

{

AsciiArray[0] = IntNumber / 100 + 0x30;

AsciiArray[1] = IntNumber % 100 / 10 + 0x30;

AsciiArray[2] = IntNumber % 10 + 0x30;

AsciiArray[3] = 0x20;

AsciiArray[4] = 0x20;

return;

}

if (IntNumber < 10000)

{

AsciiArray[0] = IntNumber / 1000 + 0x30;

AsciiArray[1] = IntNumber % 1000 / 100 + 0x30;

AsciiArray[2] = IntNumber % 100 / 10 + 0x30;

AsciiArray[3] = IntNumber % 10 + 0x30;

AsciiArray[4] = 0x20;

return;

}

else

{

AsciiArray[0] = IntNumber / 10000 + 0x30;

AsciiArray[1] = IntNumber % 10000 / 1000 + 0x30;

AsciiArray[2] = IntNumber % 1000 / 100 + 0x30;

AsciiArray[3] = IntNumber % 100 / 10 + 0x30;

AsciiArray[4] = IntNumber % 10 + 0x30;

return;

}

}

以上就是关于STM32串口发送整组数组全部的内容,包括:STM32串口发送整组数组、C语言定义发送一个二维数组的数据到串口的函数、串口如何正确发送接收数组等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10123855.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存