这是本人第一次接触STM8S单片机,所以记录一下,方便日后查找。
正文
Uart2串口作为STM8S的标准串口之一,它的作用就是以有线连接的方式为STM8S单片机提供对外通讯的通道。
初始化
要想使用串口的第一步就是要完成对串口相关引脚的初始化以及串口本身的初始化。
具体代码如下:
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);
UART2_DeInit();
UART2_Init(115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);
UART2_Cmd(ENABLE);
UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);
enableInterrupts();
以上代码我会逐句解释:
GPIO_DeInit() 用来将关于通用IO口的寄存器置为缺省值,即初始值
GPIO_Init() 用来设置通用IO口的模式,其中前两个参数用来指明具体是哪个通用IO口,第三个参数说明将该GPIO初始化为何种模式。关于模式的具体定义可以参考数据手册或者进入下面的链接:
链接:link
UART2_DeInit() 同样将串口的相关配置初始化为缺省值
UART2_Init() (这个初始化函数的参数列表真的是我见过的最长的。。。)
相关参数:
115200:波特率
UART2_WORDLENGTH_8D:字长8位
UART2_STOPBITS_1:停止位一位
UART2_PARITY_NO:奇偶校验
UART2_SYNCMODE_CLOCK_DISABLE:同步模式
UART2_MODE_TXRX_ENABLE:收发使能
UART2_Cmd(ENABLE):UART2使能
UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE):使能中断接收
enableInterrupts():使能全局中断
接收发送数据
当完成以上初始化后,就可以进入收发数据的环节了
数据发送
库函数提供了最基本的发送函数:
UART2_SendData8()
不过想直接应用到代码中,你极有可能可能会掉坑而且摔得不轻
以我惨痛的经历敬告大家:
如果不想自己的数据被发送的支离破碎,惨不忍睹的话,请将发送函数UART2_SendData8()包含到自定义发送函数中,例如:
void Send(uint8_t Data)
{
while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET));
UART2_SendData8(Data);
while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET));
}
while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET)):等待发送寄存器为空
UART2_FLAG_TXE是代表发送寄存器为空的标志
while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET)):等待传输完成
UART2_FLAG_TC是代表发送完成的标志
数据接收
这个也有基本函数UART2_ReceiveData8()
虽然这个不用顾及标志位的问题,但是这个要考虑中断的问题,上面提到的Uart2的中断使能以及全局开中断都是为了能及时顺利接收数据。
所以一般接收函数都要放到位于stm8s_it.c文件下:
INTERRPUT_HANDLER(UART2_RX_IRQHandler, 21)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
顺带提一句,所有的中断处理函数都在stm8s_it.c这个文件中,例如TIM,I2C,ADC等。
这是本人第一次接触STM8S单片机,所以记录一下,方便日后查找。
正文
Uart2串口作为STM8S的标准串口之一,它的作用就是以有线连接的方式为STM8S单片机提供对外通讯的通道。
初始化
要想使用串口的第一步就是要完成对串口相关引脚的初始化以及串口本身的初始化。
具体代码如下:
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);
UART2_DeInit();
UART2_Init(115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);
UART2_Cmd(ENABLE);
UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);
enableInterrupts();
以上代码我会逐句解释:
GPIO_DeInit() 用来将关于通用IO口的寄存器置为缺省值,即初始值
GPIO_Init() 用来设置通用IO口的模式,其中前两个参数用来指明具体是哪个通用IO口,第三个参数说明将该GPIO初始化为何种模式。关于模式的具体定义可以参考数据手册或者进入下面的链接:
链接:link
UART2_DeInit() 同样将串口的相关配置初始化为缺省值
UART2_Init() (这个初始化函数的参数列表真的是我见过的最长的。。。)
相关参数:
115200:波特率
UART2_WORDLENGTH_8D:字长8位
UART2_STOPBITS_1:停止位一位
UART2_PARITY_NO:奇偶校验
UART2_SYNCMODE_CLOCK_DISABLE:同步模式
UART2_MODE_TXRX_ENABLE:收发使能
UART2_Cmd(ENABLE):UART2使能
UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE):使能中断接收
enableInterrupts():使能全局中断
接收发送数据
当完成以上初始化后,就可以进入收发数据的环节了
数据发送
库函数提供了最基本的发送函数:
UART2_SendData8()
不过想直接应用到代码中,你极有可能可能会掉坑而且摔得不轻
以我惨痛的经历敬告大家:
如果不想自己的数据被发送的支离破碎,惨不忍睹的话,请将发送函数UART2_SendData8()包含到自定义发送函数中,例如:
void Send(uint8_t Data)
{
while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET));
UART2_SendData8(Data);
while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET));
}
while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET)):等待发送寄存器为空
UART2_FLAG_TXE是代表发送寄存器为空的标志
while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET)):等待传输完成
UART2_FLAG_TC是代表发送完成的标志
数据接收
这个也有基本函数UART2_ReceiveData8()
虽然这个不用顾及标志位的问题,但是这个要考虑中断的问题,上面提到的Uart2的中断使能以及全局开中断都是为了能及时顺利接收数据。
所以一般接收函数都要放到位于stm8s_it.c文件下:
INTERRPUT_HANDLER(UART2_RX_IRQHandler, 21)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
顺带提一句,所有的中断处理函数都在stm8s_it.c这个文件中,例如TIM,I2C,ADC等。
举报