基于STVD玩转stm8中UART的问题!
0赞
发表于 1/5/2011 8:50:53 AM
阅读(5923)
使用的是STM8S207S8T6C,包含的头文件中stm8s207s8.h,但是stm8s207s8.h文件包含stm8s207c_s.h,直接查看stm8s207c_s.h文件,发现只定义uart1为一般串口,而uart3则作为LIN使用,导致串口设置好了无法接收到数据(线是接在uart3上),重新将线焊接到uart1上,串口就可以接收到数据了。以下为stm8s207c_s.h文件内的uart1定义
/* USART Status Register */
DEF_8BIT_REG_AT(USART_SR,0x5230);
DEF_8BIT_REG_AT(USART_SR,0x5230);
/* USART Data Register */
DEF_8BIT_REG_AT(USART_DR,0x5231);
DEF_8BIT_REG_AT(USART_DR,0x5231);
/* USART Baud Rate Register 1 */
DEF_8BIT_REG_AT(USART_BRR1,0x5232);
DEF_8BIT_REG_AT(USART_BRR1,0x5232);
/* USART Baud Rate Register 2 */
DEF_8BIT_REG_AT(USART_BRR2,0x5233);
DEF_8BIT_REG_AT(USART_BRR2,0x5233);
/* USART Control Register 1 */
DEF_8BIT_REG_AT(USART_CR1,0x5234);
DEF_8BIT_REG_AT(USART_CR1,0x5234);
/* USART Control Register 2 */
DEF_8BIT_REG_AT(USART_CR2,0x5235);
DEF_8BIT_REG_AT(USART_CR2,0x5235);
/* USART Control Register 3 */
DEF_8BIT_REG_AT(USART_CR3,0x5236);
DEF_8BIT_REG_AT(USART_CR3,0x5236);
/* USART Control Register 4 */
DEF_8BIT_REG_AT(USART_CR4,0x5237);
DEF_8BIT_REG_AT(USART_CR4,0x5237);
/* USART Control Register 5 */
DEF_8BIT_REG_AT(USART_CR5,0x5238);
DEF_8BIT_REG_AT(USART_CR5,0x5238);
/* USART Guard time Register */
DEF_8BIT_REG_AT(USART_GTR,0x5239);
DEF_8BIT_REG_AT(USART_GTR,0x5239);
/* USART Prescaler Register */
DEF_8BIT_REG_AT(USART_PSCR,0x523a);
DEF_8BIT_REG_AT(USART_PSCR,0x523a);
在网上看到IAR也支持STM8了,也安装了一个,在安装的库中找到iostm8s207s8.h,看看是否也是如STVD那样,
/*-------------------------------------------------------------------------
* UART3 register definitions
*-----------------------------------------------------------------------*/
/* UART3 status register */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char PE : 1;
unsigned char FE : 1;
unsigned char NF : 1;
unsigned char OR : 1;
unsigned char IDLE : 1;
unsigned char TC : 1;
unsigned char RXNE : 1;
unsigned char TXE : 1;
} __BITS_UART3_SR;
#endif
__IO_REG8_BIT(UART3_SR, 0x5240, __READ_WRITE, __BITS_UART3_SR);
* UART3 register definitions
*-----------------------------------------------------------------------*/
/* UART3 status register */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char PE : 1;
unsigned char FE : 1;
unsigned char NF : 1;
unsigned char OR : 1;
unsigned char IDLE : 1;
unsigned char TC : 1;
unsigned char RXNE : 1;
unsigned char TXE : 1;
} __BITS_UART3_SR;
#endif
__IO_REG8_BIT(UART3_SR, 0x5240, __READ_WRITE, __BITS_UART3_SR);
/* UART3 data register */
__IO_REG8 (UART3_DR, 0x5241, __READ_WRITE);
/* UART3 baud rate register 1 */
__IO_REG8 (UART3_BRR1, 0x5242, __READ_WRITE);
/* UART3 baud rate register 2 */
__IO_REG8 (UART3_BRR2, 0x5243, __READ_WRITE);
/* UART3 control register 1 */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char PIEN : 1;
unsigned char PS : 1;
unsigned char PCEN : 1;
unsigned char WAKE : 1;
unsigned char M : 1;
unsigned char UARTD : 1;
unsigned char T8 : 1;
unsigned char R8 : 1;
} __BITS_UART3_CR1;
#endif
__IO_REG8_BIT(UART3_CR1, 0x5244, __READ_WRITE, __BITS_UART3_CR1);
__IO_REG8 (UART3_DR, 0x5241, __READ_WRITE);
/* UART3 baud rate register 1 */
__IO_REG8 (UART3_BRR1, 0x5242, __READ_WRITE);
/* UART3 baud rate register 2 */
__IO_REG8 (UART3_BRR2, 0x5243, __READ_WRITE);
/* UART3 control register 1 */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char PIEN : 1;
unsigned char PS : 1;
unsigned char PCEN : 1;
unsigned char WAKE : 1;
unsigned char M : 1;
unsigned char UARTD : 1;
unsigned char T8 : 1;
unsigned char R8 : 1;
} __BITS_UART3_CR1;
#endif
__IO_REG8_BIT(UART3_CR1, 0x5244, __READ_WRITE, __BITS_UART3_CR1);
/* UART3 control register 2 */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char SBK : 1;
unsigned char RWU : 1;
unsigned char REN : 1;
unsigned char TEN : 1;
unsigned char ILIEN : 1;
unsigned char RIEN : 1;
unsigned char TCIEN : 1;
unsigned char TIEN : 1;
} __BITS_UART3_CR2;
#endif
__IO_REG8_BIT(UART3_CR2, 0x5245, __READ_WRITE, __BITS_UART3_CR2);
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char SBK : 1;
unsigned char RWU : 1;
unsigned char REN : 1;
unsigned char TEN : 1;
unsigned char ILIEN : 1;
unsigned char RIEN : 1;
unsigned char TCIEN : 1;
unsigned char TIEN : 1;
} __BITS_UART3_CR2;
#endif
__IO_REG8_BIT(UART3_CR2, 0x5245, __READ_WRITE, __BITS_UART3_CR2);
/* UART3 control register 3 */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char : 4;
unsigned char STOP : 2;
unsigned char LINEN : 1;
} __BITS_UART3_CR3;
#endif
__IO_REG8_BIT(UART3_CR3, 0x5246, __READ_WRITE, __BITS_UART3_CR3);
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char : 4;
unsigned char STOP : 2;
unsigned char LINEN : 1;
} __BITS_UART3_CR3;
#endif
__IO_REG8_BIT(UART3_CR3, 0x5246, __READ_WRITE, __BITS_UART3_CR3);
/* UART3 control register 4 */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char ADD : 4;
unsigned char LBDF : 1;
unsigned char LBDL : 1;
unsigned char LBDIEN : 1;
} __BITS_UART3_CR4;
#endif
__IO_REG8_BIT(UART3_CR4, 0x5247, __READ_WRITE, __BITS_UART3_CR4);
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char ADD : 4;
unsigned char LBDF : 1;
unsigned char LBDL : 1;
unsigned char LBDIEN : 1;
} __BITS_UART3_CR4;
#endif
__IO_REG8_BIT(UART3_CR4, 0x5247, __READ_WRITE, __BITS_UART3_CR4);
/* UART3 control register 6 */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char LSF : 1;
unsigned char LHDF : 1;
unsigned char LHDIEN : 1;
unsigned char : 1;
unsigned char LASE : 1;
unsigned char LSLV : 1;
unsigned char : 1;
unsigned char LDUM : 1;
} __BITS_UART3_CR6;
#endif
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char LSF : 1;
unsigned char LHDF : 1;
unsigned char LHDIEN : 1;
unsigned char : 1;
unsigned char LASE : 1;
unsigned char LSLV : 1;
unsigned char : 1;
unsigned char LDUM : 1;
} __BITS_UART3_CR6;
#endif
以上为iostm8s207s8.h对于uart3的部分定义,应该是可以作为一般的uart来用了吧,还没试验,到时发一个
看来编译器问题很严重呀!!
呵呵
