新手入门
- 积分
- 6
- 金钱
- 6
- 注册时间
- 2019-4-28
- 在线时间
- 1 小时
|

楼主 |
发表于 2019-4-28 11:38:14
|
显示全部楼层
自己找网上一段例程,改了一下个别参数,串口助手显示只有发送没有接收
#include "stm32f10x.h"
#include "usart.h"
//void uart_init(u32 bound) //初始化串口1和串口2,函数的参数是波特率
//{
// //GPIO端口设置
// GPIO_InitTypeDef GPIO_InitStructure;
// USART_InitTypeDef USART_InitStructure;
// NVIC_InitTypeDef NVIC_InitStructure;
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //使能USART2,
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟
// //USART2_TX GPIOA.2
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
// GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
// //USART2_RX GPIOA.3初始化
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA.3
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
// GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA
// //Usart2 NVIC 配置
// NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
// NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
// //USART 初始化设置
// USART_InitStructure.USART_BaudRate = 9600;//串口波特率
// 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(USART2, &USART_InitStructure); //初始化串口2
// USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断
// USART_Cmd(USART2, ENABLE); //使能串口2
//
//}
//void USART2_IRQHandler(void) //串口2中断服务程序
// {
// u8 Res;
// static char i=0, start=0;
// if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断
// {
// Res =USART_ReceiveData(USART2); //读取接收到的数据
// //USART_SendData(USART1,Res);
// if(Res == 0x3C) //如果接收的第一位数据是0X3C(这个是查看传感器的手册得知的)
// {
// USART_RX_STA = 0; //让数组索引值从0开始
// start = 1; //这个变量是来确定第二位是否接收到了0X4D(这个也是查看传感器的手册得知的)
// }
// if(start == 1)
// {
// USART_RX_BUF[USART_RX_STA] = Res ; //把接收到的数据存到数组里面
// USART_RX_STA++;
// if(USART_RX_STA >= 17 && (USART_RX_BUF[1]==0x02))
// {
// //USART_SendData(USART1,USART_RX_BUF[2]*256+USART_RX_BUF[3]);
// printf("CO2:%d\n",USART_RX_BUF[2]*256+USART_RX_BUF[3]);
// start = 0;
// USART_RX_STA=0;//重新开始接收
// USART_RX_BUF[0] = 0;
// }
// }
// }
// }
//
// int fputc(int ch, FILE *f)
//{
// while((USART2->SR&0X40)==0);//循环发送,直到发送完毕
// USART2->DR = (u8) ch;
// return ch; |
|