|
最近无聊说学习一下串口通信,控制595。595的已经用仿真软件测试通过了,现在试想用串口控制595.代码复制粘贴完(cv工程师嘛,你懂的),上串口工具测试。好了乱码了。但是这个乱码好奇怪,发一大串字符过去,接收到的只是前面的几个位置乱了,后面的就显示正常(如图1)。
如果发送两行,第一行乱码,第二行是正常的(如图2)。
百度了说是晶振频率不对,我也看了,都是对的。也有说波特率不对的,都一一试了,还是有问题。
电脑也换了试过,usb转com的线也换了试,一样不行。没招了。
以前有用个f103zet6做的一个小玩意,也使用了串口通信,那个产品一点问题都没有。
麻烦大佬帮忙看看。感谢!!!
下面是单片机代码
void HC595_USART_Init(void)
{
GPIO_InitTypeDef GPIO_InitSturct;
NVIC_InitTypeDef NVIC_InitSturct;
USART_InitTypeDef USART_InitSturct;
/***************************时钟使能****************************/
//串口1时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//GPIOA端口使能(PA9-USART_TX,PA10-USART_RX)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
/************************GPIO端口初始化************************/
//PA9-USART_TX
GPIO_InitSturct.GPIO_Mode = GPIO_Mode_AF_PP; //推挽复用输出
GPIO_InitSturct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitSturct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitSturct); //初始化串口
//PA10-USART_RX
GPIO_InitSturct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitSturct.GPIO_Pin = GPIO_Pin_10;
GPIO_InitSturct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitSturct); //初始化串口
/***************************USART1参数初始化配置***************************/
USART_InitSturct.USART_BaudRate = bound; //波特率设置为115200
USART_InitSturct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
USART_InitSturct.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; //收发
USART_InitSturct.USART_Parity = USART_Parity_No; //无奇偶校验位
USART_InitSturct.USART_StopBits = USART_StopBits_1; //一个停止位
USART_InitSturct.USART_WordLength = USART_WordLength_8b; //字长为8位
USART_Init(USART1,&USART_InitSturct); //初始化串口
/***********************USART1 NVIC中断配置*************************/
NVIC_InitSturct.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitSturct.NVIC_IRQChannelCmd = ENABLE; //IRQn通道使能
NVIC_InitSturct.NVIC_IRQChannelPreemptionPriority = 3; //抢占优先级
NVIC_InitSturct.NVIC_IRQChannelSubPriority = 3; //子优先级3
NVIC_Init(&NVIC_InitSturct);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //开启接收数据中断
USART_Cmd(USART1,ENABLE); //使能串口
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
//串口 TX(PA9),RX(PA10)
void USART1_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET) //串口接收到中断,即读取串口接受的数据
{
PCout(13) = 0;
res = USART_ReceiveData(USART1); //读取接收到的数据
USART_SendData(USART1,res);
}
}
int main(void)
{
In_Working();
HC595_Init();
HC595_SendData(0x00);// all to 0
HC595_USART_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//printf("22222222222222222222222222222222");
while (1)
{
//+++++++++++++++++++++++++++++++++
PCout(13) = 0;
Delay(0xffff);
PCout(13) = 1;
Delay(0xffff);
//+++++++++++++++++++++++++++++++++
//Usart_SendByte( USART1, 'A' );
//Usart_SendString(USART1,"SASDASD");
}
}
|
-
1.png
(139.63 KB, 下载次数: 173)
图1
-
2.png
(144.09 KB, 下载次数: 85)
图2
|