金牌会员
 
- 积分
- 1330
- 金钱
- 1330
- 注册时间
- 2020-1-10
- 在线时间
- 131 小时
|
20金钱
我想利用精英开发板的485实现与串口助手的通讯,所以在提供的例程上进行修改,可是修改后串口助手收到的都是方框和乱码,同样的修改在探索者407上却可以实现,各位大佬们知道为什么吗?程序在下面附上
主程序
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
//#include "lcd.h"
#include "usart.h"
#include "rs485.h"
/************************************************
ALIENTEK精英STM32开发板实验24
485 实验
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司
作者:正点原子 @ALIENTEK
************************************************/
int main(void)
{
u8 key;
u8 i=0,t=0;
u8 cnt=0;
u8 rs485buf[5];
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //按键初始化
RS485_Init(9600); //初始化RS485
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES)//KEY0按下,发送一次数据
{
rs485buf[0]=cnt++;//填充发送缓冲区
printf("%d\r\n",rs485buf[0]);
RS485_Send_Data(rs485buf,5);//发送5个字节
}
RS485_Receive_Data(rs485buf,&key);
if(key)//接收到有数据
{
if(key>5)key=5;//最大是5个数据.
}
t++;
delay_ms(10);
if(t==20)
{
LED0=!LED0;//提示系统正在运行
t=0;
}
}
}
printf函数的调用已经从usart.c转移到rs485.c并改为usart2,其余代码没有再修改,485波特率已改为9600

|
最佳答案
查看完整内容[请看2#楼]
我是说重定向fputc函数
你的485重定向:
int fputc(int ch, FILE *f)
{
while((USART2->SR&0X40)==0);//循环发送,直到发送完毕
USART2->DR = (u8) ch;
return ch;
}
我的485重定向:
int fputc(int ch, FILE *f)
{
GPIO_SetBits(GPIOB, GPIO_Pin_2); /* 释放总线2 */
#if 0
comSendChar(COM2, ch);
return ch;
#else
USART_SendData(USART2, (uint8_t) ch);
/* 等待发送结束 */ ...
|