当前位置:数据分析 > stm32f407串口发送函数(stm32f4串口发送数据)

stm32f407串口发送函数(stm32f4串口发送数据)

  • 发布:2023-09-29 07:02

stm32f407串口发送函数(stm32f4串口发送数据)

stm32f407 usart 单步调试时数据发送成功,但是板子连续运行时,发送出去的数据全部为零

/* 将 fputc 的实现放在这里 */
/* 例如向 USART 写入一个字符 */
USART_SendData(DEBUG_USART, (uint8_t) ch);
/* 循环直到发送结束 */
while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TC) == RESET)
{}
第二句话你说完了吗

请介绍一下STM32串口功能。这个函数是什么以及它有什么作用?

USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);这是判断串口是否触发接受(USART_IT_RXNE)中断。如果是发送中断则为(USART_IT_TXE)。如果产生中断,则接受生成的8位二进制数据,并且我猜测i的设置是原始发布者设置的初始值以接受字符串。发送完成后会设置晴空标志

stm32中如何设置串口发送和接收?

串口时钟使能、GPIO时钟使能
2)串口复位
3)GPIO口模式设置
4)串口参数初始化
5)使能中断并初始化NVIC(如果满足则使能)必要 此步骤仅需要中断)
6)启用串口
7)编写中断处理函数
。使能串口时钟。串口是APB2下挂载的外设,所以使能函数为:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);
2。串口复位。当外设出现异常时,可以通过复位设置重置外设,然后重新配置外设
,使其重新工作。一般情况下,系统第一次配置外设时,会先执行重置外设
的操作。复位在函数 USART_DeInit() 中完成:
void USART_DeInit(USART_TypeDef* USARTx); //串口复位
例如我们要复位串口1,方法为:
USART_DeInit(USART1); //复位串口1
3。串口参数初始化。串口初始化通过USART_Init()函数实现,
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
该函数第一个入口参数是指定初始化时的串口标签,这里选择USART1。
第二个入口参数是USART_InitTypeDef类型结构体指针。该结构体指针的成员变量使用
来设置串口的一些参数。一般实现格式为:
USART_InitStructure.USART_BaudRate =bound; //一般设置为9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式
USART_InitStructure.USART_Stop Bits = 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); //初始化串口
从上面的初始化格式可以看出,初始化需要设置的参数有:波特率、字长、停止位、奇偶校验位、
硬件数据流控制、模式(接收、发送)。我们可以根据需要设置这些参数。
4。数据发送和接收。 STM32的发送和接收是通过数据寄存器USART_DR来实现的,USART_DR是一个包含TDR和RDR的双寄存器。当向该寄存器写入数据时,串口会自动发送。当
接收到数据时,也会存储到该寄存器中。
STM32库函数操作USART_DR寄存器发送数据的函数为:
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
通过该函数向串口寄存器USART_DR写入一个数据。
STM32库函数操作USART_DR寄存器 读取串口接收到的数据的函数为:
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
该函数可以读取串口接收到的数据。
5。串口状态。串口的状态可以通过状态寄存器USART_SR读取。 USART_SR的描述如下
这里重点关注两个位,第5位和第6位RXNE和TC。
RXNE(读数据寄存器不为空),当该位设置为1时,表示已接收到数据,可以读出
。这时候我们要做的就是尽快读取USART_DR。通过读取USART_DR,我们可以清除
位,也可以对该位写入0直接清除。
TC(发送完成),当该位置位时,表示USART_DR中的数据已经发送完毕。如果
该位的中断被置位,则会产生中断。清除该位的方法也有两种: 1)读USART_SR,写
USART_DR。 2) 直接向该位写入0。
状态寄存器的其他位我们在这里不做过多解释。如果需要的话可以查看中文参考手册。
在我们的固件库函数中,读取串口状态的函数是:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
这个函数的第二个入口参数非常关键,它标志着我们要检查串口的状态,比如上面解释的
RXNE(读数据寄存器不为空)和TC(发送完成)。例如,我们要判断读寄存器是否不为空(RXNE),操作库函数的方法为:
USART_GetFlagStatus(USART1, USART_FLAG_RXNE);方法为:
USART_GetFlagStatus(USART1, USART_FLAG_TC);
这些标识号是通过MDK中的宏定义来定义的:

以上是小编对stm32f407串口发送功能(stm32f4串口发送数据)及相关问题的解答。希望关于stm32f407串口发送功能(stm32f4串口发送数据)对您有用!

相关文章

最新资讯