2019-07-21 00:27发布
15级的许同学 发表于 2019-5-12 09:36 5楼大哥你好,我按照你说的单独测试了串口输出: 以下是主函数实验程序:[mw_shl_code=cpp,true]int m ...
xlong_06 发表于 2019-5-10 15:38 是你的接收端接收速度慢,或者你发送的波特率低,数据都没有传完你又开始传数据了,数据肯定丢!
www88988 发表于 2019-5-11 09:46 你那个 USART1_SendOneChar(uchar ch) 函数可这么写 USART1_SendOneChar(uchar ch) {
最多设置5个标签!
这是我的测试结果 ((4 * 320)+3)*240 = 307920 一点也不少啊
//下面是子函数
void test(void)
{
u16 i,k;//color;
for(i=0;i<240;i++)
{
USART1_SendStr("L");//???
for(k=0;k<320;k++)
{
//color=0x9EF7;
//printf("%04X", color);//???????,? ??
////???:??????
USART1_SendOneChar('9');
USART1_SendOneChar('E');
USART1_SendOneChar('F');
USART1_SendOneChar('7');
}
//UART_Put_Num(i); //????????i????
USART1_SendStr(" ");
IWDG_Feed(); // 喂狗(没开启看门狗可以去掉)
}
}
void USART1_SendOneChar(u8 ch)
{
USART_SendData(USART1,ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
void USART1_SendStr(u8 *str)
{
while( (*str)!=' ' )
{
USART1_SendOneChar(*str);
str++;
}
}
3楼大哥你好,我设置波特率是115200,接收端是串口调试助手,不是自己编写的上位机,也设置了波特率115200。是接受端接收数据不及时的问题吗?。。。。
以下是我的串口初始化函数:调用的是USART1_Init(115200);
/*******************************************************************************
* 函 数 名 : USART1_Init
* 函数功能 : USART1初始化函数
* 输 入 : bound:波特率
* 输 出 : 无
*******************************************************************************/
void USART1_Init(u32 bound)
{
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //打开时钟
/* 配置GPIO的模式和IO口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX //串口输出PA9
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化串口输入IO */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX //串口输入PA10
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //模拟输入
GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化GPIO */
//USART1 初始化设置
USART_InitStructure.USART_BaudRate = bound;//波特率设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
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_Init(USART1, &USART_InitStructure); //初始化串口1
USART_Cmd(USART1, ENABLE); //使能串口1
USART_ClearFlag(USART1, USART_FLAG_TC);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、
}
USART1_SendOneChar(uchar ch)
{
USART_SendData(USART1, ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
因为没有做中断处理所以初始化时去了
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启相关中断
这句话
发送数据别用printf函数,就用你的USART1_SendOneChar 发送
串口发送数据只跟波特率有关,不需要延时,可以去了延时。改动后再用串口助手试试。
5楼大哥你好,我按照你说的单独测试了串口输出:
以下是主函数实验程序:[mw_shl_code=cpp,true]int main()
{
u16 i,j,k,color;
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
LED_Init();
USART1_Init(115200);
for(i=0;i<240;i++)
{
USART1_SendStr("L");//列有效
for(k=0;k<320;k++)
{
color=0x9EF7;
//printf("%04X", color);//打印一列的颜 {MOD},以 结尾
//已修改:单独发送字符
USART1_SendOneChar('9');
USART1_SendOneChar('E');
USART1_SendOneChar('F');
USART1_SendOneChar('7');
}
UART_Put_Num(i); //这个用来输出当前i的计数值
USART1_SendStr(" ");
}
}[/mw_shl_code]
以下是串口发送一个字符程序:(已修改)
[mw_shl_code=applescript,true]int USART1_SendOneChar(uchar ch) {
//USART1->SR;
//USART_ClearFlag(USART1,USART_FLAG_TC); //发送完成,tc位自动置1
USART_SendData(USART1,(u8)ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}
return (ch);
}[/mw_shl_code]
串口初始化函数中,也已经注释掉USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断
串口助手里收到数据,还是会有丢失,比如前一次是i=4的时候,下一次就变成了i=6了,中间i=5的数据不知道去哪里了。
以下是串口助手收到的部分情况。
一周热门 更多>