背景
最近做项目用到STM8S的单片机,STM8需要用IAR的STM8的软件版本来进行编译和下载。使用的是STlink的编仿真器,但是这个IAR的版本会存在一些问题,
1、断点的添加,有时可以在运行时添加,有时却不能。
2、点击仿真,连接到芯片时可以正常下载,但如果没有连接到芯片也不会有报错,只是不会运行。
3、如果之前有工程打开过,记得关闭所有的C和H的问题,不然可能编辑的是上一个文件。
正文
首先进行初始化
#define UART_MAX_TX_LEN 50 //定义最大发送字节数
#define UART_MAX_RX_LEN 50 //定义最大接收字节数
typedef struct
{
uint8_t REC_FLAG;
uint16_t REC_COUNT;
uint8_t TX_BUF[UART_MAX_TX_LEN]; //发送缓冲
uint8_t RX_BUF[UART_MAX_RX_LEN]; //接收缓冲
}USART_Def;
SART_Def UART_2;
void Uart2_Init(void)
{
UART2_DeInit(); /* 将寄存器的值复位 */
/*
* 将UART1配置为:
* 波特率 = 9600
* 数据位 = 8
* 1位停止位
* 无校验位
* 使能接收和发送
* 使能接收中断
*/
UART2_Init((u32)9600, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO , UART2_SYNCMODE_CLOCK_DISABLE , UART2_MODE_TXRX_ENABLE);
UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);//开启接收中断
UART2_ITConfig(UART2_IT_IDLE, ENABLE);//开启空闲中断
UART2_Cmd(ENABLE);
enableInterrupts(); //使能中断
}
发送函数
void UART2_SendByte(uint8_t data)
{
UART2_SendData8((unsigned char)data);
/* 等待传输结束 */
while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET);
}
接收中断函数,在stm8s_it.c文件中
/**
* @brief UART2 RX interrupt routine.
* @param None
* @retval None
*/
INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
//unsigned char ch;
// rx_data = UART2_ReceiveData8() + 1;
if(UART2_GetITStatus(UART2_IT_RXNE) != RESET) //检查指定的UART2中断是否发生。
{
if(UART_2.REC_COUNT<UART_MAX_RX_LEN)
{
UART_2.RX_BUF[UART_2.REC_COUNT] = UART2_ReceiveData8();//接收1位数据
UART_2.REC_COUNT++;
}
else
{
UART_2.REC_FLAG =1; //强制标记接收完成
}
UART2_ClearITPendingBit(UART2_IT_RXNE);
}
else if(UART2_GetITStatus(UART2_IT_IDLE) != RESET) //清除中断
{
UART2->SR;//执行这两句可以,清除空闲中断 , //空闲中断没有单独的清除函数
UART2->DR;//执行这两句可以,清除空闲中断, //空闲中断没有单独的清除函数
UART_2.REC_FLAG = 1;
}
}