gpt4 book ai didi

c - 使用STM8L在UART上接收数据

转载 作者:行者123 更新时间:2023-11-30 14:56:53 36 4
gpt4 key购买 nike

我想知道,如何将UART上的数据发送到STM8L?我写了一个与其他人类似的代码,我认为我的硬件没问题。我通过终端软件将一些数据发送到PC上的STM8L。在这里,我想我应该首先发送一些它检测到启动的数据,如数据表中所述。现在我该怎么办?请原谅我的语法错误。感谢您的帮助:)

/*********************
*
* USART
*
*********************/

#include <iostm8l.h>
#include <delay.h>
#include <HD44780.h>
/*********************
*
* Defining BITs of Registers
*
*********************/
#define UART1 0X05
#define TC 0X06 //transmittion complete
#define M 0X04 //word length
#define PS 0X01 //parity selection
#define PCEN 0X02 //parity control enable/disable
#define WAKE 0X03 //wake up method
#define TIEN 0X07 //Transmitting interrupt enable
#define TCIEN 0X06 //wherever tc become set
#define TEN 0X03 //Transmitting enable
#define REN 0X02 //Reciving enable
#define RIEN 0X05 //Recieving interrupt enable
#define PC3 0X03 //pin 3 of the PORTC
#define TXE 0X07 //transmit data register is empty
#define TX 0XF0
#define RX 0X0F
#define RXNE 0X05
#define PE 0X00
#define FE 0X01
#define OR 0X03
#define NF 0X02
/*********************
*
* Initializing
* 1-Config Port Direction
* 2-Enabling USART clock
* 3-Buad rate on 9600 in 2MHz cpu clock
* 4-no parity
* 5-one stop bit
*
*********************/
void Initialize_USART(void)
{
PC_DDR|=(1 << PC3);
PC_CR1|=(1 << PC3);
CLK_PCKENR1|=(1 << UART1);
//program the m bit
//program stop bit
//USART1_CR1|=(1<<PCEN);
//select dma
USART1_BRR2=0X00;
USART1_BRR1=0X0D;
USART1_CR2|=(1<<TEN)|( 1 << REN );
delay_us(1);
}
void Sending_Data(char *data)
{
while(*data++)
{
USART1_DR=*data;
while(!(USART1_SR & ( 1 << TXE )));
while(!(USART1_SR & ( 1 << TC )));
USART1_SR&=~(1<<TC);
}
}
void Get_Data(char *return_data)
{
while(!(USART1_SR & ( 1 << RXNE )));
/*if(USART1_SR && ( 1 << PE ))
{
Clear_Lcd();
Display_Char(" Parity Error ");
delay_ms(250);
return;
}
else if(USART1_SR && ( 1 << FE ))
{
Clear_Lcd();
Display_Char(" Frame Error ");
delay_ms(250);
return;
}
else if(USART1_SR && ( 1 << OR ))
{
Clear_Lcd();
Display_Char(" Overrun Error ");
delay_ms(250);
return;
}
else if(USART1_SR && ( 1 << NF ))
{
Clear_Lcd();
Display_Char(" Parity Error ");
delay_ms(250);
return;
}*/
*return_data=USART1_DR;
}

STM8L15xxx Datasheet, detecting start bit in UART

最佳答案

我也遇到同样的问题。我只是重新配置系统时钟就完成了。我的方法:

/高速内部时钟预分频器:1/

CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

关于c - 使用STM8L在UART上接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44340773/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com