小学生
最后登录1970-1-1
在线时间 小时
注册时间2025-2-8
|
开发板 霸天虎 stm32407
串口:板载USB转串口
描述:跟着视频学习串口发送一个字节,视频上的内容是复位一下发一个字节,我把它修改了,上电就连续发送0x41
问题:将程序下载在学习板后,希望连续发送0x41,但是我关掉开发板电源,在打开它后,串口调试助手收到的码是
66 66 66 66 66 66 41 41 41 41 41 41......
我将视频后的例程修改了以后,还是一样,只是前面的'66'可能长度不一样,我将DAP仿真器拔掉也一样。
下面是我的程序
#include "bsp_usart.h"
static void Usart_GPIO_Config(void)
{
/*开启时钟,GPIOA*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
/*定义初始化结构体*/
GPIO_InitTypeDef GPIO_InitStruct;
/*第三步 配置GPIO初始化结构体成员*/
/*PA9是TX发送端口*/
GPIO_InitStruct.GPIO_Mode =GPIO_Mode_AF; //设置为复用模式
GPIO_InitStruct.GPIO_OType =GPIO_OType_PP; //设置为推挽输出
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz; //波特率为11.0952,端口的速度也得跟上
GPIO_InitStruct.GPIO_PuPd =GPIO_PuPd_UP ;//设置为上拉模式
/*第四步 调用GPIO初始化函数,把配置好的结构体成员的参数写入寄存器*/
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_9;//也可以将不同的引脚分别进入初始化函数
GPIO_Init(GPIOA , &GPIO_InitStruct);
/*PA10是RX读端口,配置成复用*/
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_10;//也可以将不同的引脚分别进入初始化函数
GPIO_Init(GPIOA , &GPIO_InitStruct);
/*407复用功能不分输入输出*/
/*第五步:GPIO到底复用成什么功能*/
/*PA9连接到串口1的发送,PA10连接到串口1读取*/
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
}
static void NVIC_Config(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置分组
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =1; //主优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority =1; //子优先级
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE ; //使能
NVIC_InitStruct.NVIC_IRQChannel =USART1_IRQn ; //选择中断源
NVIC_Init(&NVIC_InitStruct);
}
void USART_Config(void)
{
Usart_GPIO_Config();
/*第一步,开启USART1串口时钟*/
RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1 ,ENABLE );
// /*第二步,配置USART1串口结构体*/
//USART_InitTypeDef USART_InitStrutre;
USART_InitTypeDef USART_InitStructure;
// USART_InitStrutre.USART_BaudRate=115200; //波特率
// USART_InitStrutre.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //硬件流
// USART_InitStrutre.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; //输出模式与输入模式
// USART_InitStrutre.USART_Parity=USART_Parity_No; //无奇偶校验
// USART_InitStrutre.USART_StopBits=USART_StopBits_1 ; //一位停止位
// USART_InitStrutre.USART_WordLength =USART_WordLength_8b ;//数据位8位
// USART_Init(USART1,& USART_InitStrutre);
/* 第二步:配置串口初始化结构体 */
/* 使能 USART 时钟 */
/* 配置串DEBUG_USART 模式 */
/* 波特率设置:DEBUG_USART_BAUDRATE */
USART_InitStructure.USART_BaudRate = 9600;
/* 字长(数据位+校验位):8 */
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
/* 停止位:1个停止位 */
USART_InitStructure.USART_StopBits = USART_StopBits_1;
/* 校验位选择:不使用校验 */
USART_InitStructure.USART_Parity = USART_Parity_No;
/* 硬件流控制:不使用硬件流 */
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
/* USART模式控制:同时使能接收和发送 */
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* 完成USART初始化配置 */
USART_Init(USART1, &USART_InitStructure);
/*第三步 开启接收中断*/
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE );
/*第四步 开启中断*/
NVIC_Config();
/*第五步 开启串口*/
USART_Cmd(USART1 ,ENABLE );
}
/*发送一个字节*/
void USART1_SendData(uint8_t data)
{
USART_SendData (USART1, data);
while( USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
}
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
/* 发送一个字节数据到USART */
USART_SendData(pUSARTx,ch);
/* 等待发送数据寄存器为空 */
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
}
#include"stm32f4xx.h"
#include"bsp_led.h"
#include"bsp_key.h"
#include"bsp_exti.h"
#include"bsp_base_tim.h"
#include"bsp_usart.h "
#include<math.h>
#include<stdarg.h>
uint16_t flag;
int main(void)
{
/*在这里添加你自己的程序,下面两个是初始化程序*/
//GPIO_LED_Config();
flag=0;
USART_Config();
//USART_SendData(USART1 ,0x41);
// Usart_SendByte(USART1,0X41);
while(1)
{
Usart_SendByte(USART1,0X41);
}
}
图片里是开机收到的字符
|
-
|