天天

基于STVD玩转stm8中UART的问题!

0
阅读(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);
/* USART Data Register */
DEF_8BIT_REG_AT(USART_DR,0x5231);
/* USART Baud Rate Register 1 */
DEF_8BIT_REG_AT(USART_BRR1,0x5232);
/* USART Baud Rate Register 2 */
DEF_8BIT_REG_AT(USART_BRR2,0x5233);
/* USART Control Register 1 */
DEF_8BIT_REG_AT(USART_CR1,0x5234);
/* USART Control Register 2 */
DEF_8BIT_REG_AT(USART_CR2,0x5235);
/* USART Control Register 3 */
DEF_8BIT_REG_AT(USART_CR3,0x5236);
/* USART Control Register 4 */
DEF_8BIT_REG_AT(USART_CR4,0x5237);
/* USART Control Register 5 */
DEF_8BIT_REG_AT(USART_CR5,0x5238);
/* USART Guard time Register */
DEF_8BIT_REG_AT(USART_GTR,0x5239);
/* USART Prescaler Register */
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 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);
/* 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);
/* 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);
/* 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);
/* 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
以上为iostm8s207s8.h对于uart3的部分定义,应该是可以作为一般的uart来用了吧,还没试验,到时发一个
看来编译器问题很严重呀!!
呵呵