STM8S 串口应用 UART2 STM8S105
//少说话。多做事,下面是我验证过没有问题的串口发送接受数据//使用MCU stm8s105c6 UART2
//初始化时调用: GPIO_DeInit(GPIOD); /* Configure PD5/6 */ GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT);//发送数据IO GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);//接受数据IO UART2_DeInit(); UART2_Init(2400,UART2_WORDLENGTH_8D,UART2_STOPBITS_1,UART2_PARITY_NO,\ UART2_SYNCMODE_CLOCK_DISABLE,\ UART2_MODE_TX_ENABLE|UART2_MODE_RX_ENABLE); //波特率 2400 8位数据 //1个停止位 没有奇偶校验 关闭SCK 同意串口接受和发送 UART2_Cmd(ENABLE);//启用串口 UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);//同意接受中断//操作串口(发送接受数据)时调用:
if(UART2_GetFlagStatus(UART2_FLAG_TC)) {//当前没有在发数据,能够发数据 UART2_SendData8(Uart2TexData); UART2_ClearFlag(UART2_FLAG_TC); } UART2_ClearITPendingBit(UART2_FLAG_RXNE);//清中断标志位 Uart2RecData = UART2_ReceiveData8();//接受中断数据//后面两句须要发在串口接受中断中
void UART2_DeInit(void) { u8 dummy = 0; /*< Clear the Idle Line Detected bit in the status rerister by a readto the UART2_SR register followed by a Read to the UART2_DR
register */ dummy = UART2->SR; dummy = UART2->DR; UART2->BRR2 = UART2_BRR2_RESET_VALUE; /*< Set UART2_BRR2 to reset value 0x00 */ UART2->BRR1 = UART2_BRR1_RESET_VALUE; /*< Set UART2_BRR1 to resetvalue 0x00 */
UART2->CR1 = UART2_CR1_RESET_VALUE; /*< Set UART2_CR1 to reset value 0x00 */ UART2->CR2 = UART2_CR2_RESET_VALUE; /*< Set UART2_CR2 to reset value 0x00 */ UART2->CR3 = UART2_CR3_RESET_VALUE; /*< Set UART2_CR3 to reset value 0x00 */ UART2->CR4 = UART2_CR4_RESET_VALUE; /*< Set UART2_CR4 to reset value 0x00 */ UART2->CR5 = UART2_CR5_RESET_VALUE; /*< Set UART2_CR5 to reset value 0x00 */ UART2->CR6 = UART2_CR6_RESET_VALUE; /*< Set UART2_CR6 to reset value0x00 */
} void UART2_Init(u32 BaudRate, UART2_WordLength_TypeDef WordLength, UART2_StopBits_TypeDef StopBits, UART2_Parity_TypeDef Parity, UART2_SyncMode_TypeDef SyncMode, UART2_Mode_TypeDef Mode) { u8 BRR2_1, BRR2_2 = 0; u32 BaudRate_Mantissa, BaudRate_Mantissa100 = 0; /* assert_param: BaudRate value should be <= 625000 bps */ assert_param(IS_UART2_BAUDRATE_OK(BaudRate)); assert_param(IS_UART2_WORDLENGTH_OK(WordLength)); assert_param(IS_UART2_STOPBITS_OK(StopBits)); assert_param(IS_UART2_PARITY_OK(Parity)); /* assert_param: UART2_Mode value should exclude values such as UART2_ModeTx_Enable|UART2_ModeTx_Disable */ assert_param(IS_UART2_MODE_OK((u8)Mode)); /* assert_param: UART2_SyncMode value should exclude values such as UART2_CLOCK_ENABLE|UART2_CLOCK_DISABLE */ assert_param(IS_UART2_SYNCMODE_OK((u8)SyncMode)); UART2->CR1 &= (u8)(~UART2_CR1_M); /**< Clear the word length bit */ UART2->CR1 |= (u8)WordLength; /**< Set the word length bit accordingto UART2_WordLength value */
UART2->CR3 &= (u8)(~UART2_CR3_STOP); /**< Clear the STOP bits */ UART2->CR3 |= (u8)StopBits; /**< Set the STOP bits number accordingto UART2_StopBits value */
UART2->CR1 &= (u8)(~(UART2_CR1_PCEN | UART2_CR1_PS )); /**< Clear the Parity Control bit */ UART2->CR1 |= (u8)Parity; /**< Set the Parity Control bit toUART2_Parity value */
UART2->BRR1 &= (u8)(~UART2_BRR1_DIVM); /**< Clear the LSB mantissa of UARTDIV */ UART2->BRR2 &= (u8)(~UART2_BRR2_DIVM); /**< Clear the MSB mantissa of UARTDIV */ UART2->BRR2 &= (u8)(~UART2_BRR2_DIVF); /**< Clear the Fraction bitsof UARTDIV */
/**< Set the UART2 BaudRates in BRR1 and BRR2 registers according to UART2_BaudRate value */ BaudRate_Mantissa = ((u32)CLK_GetClockFreq() / (BaudRate << 4)); BaudRate_Mantissa100 = (((u32)CLK_GetClockFreq() * 100) / (BaudRate << 4)); /**< The fraction and MSB mantissa should be loaded in one step in the BRR2 register*/ BRR2_1 = (u8)((u8)(((BaudRate_Mantissa100 - (BaudRate_Mantissa * 100)) << 4) / 100) & (u8)0x0F); /**< Set the fraction of UARTDIV */ BRR2_2 = (u8)((BaudRate_Mantissa >> 4) & (u8)0xF0); UART2->BRR2 = (u8)(BRR2_1 | BRR2_2); UART2->BRR1 = (u8)BaudRate_Mantissa; /**< Set the LSBmantissa of UARTDIV */
UART2->CR2 &= (u8)~(UART2_CR2_TEN | UART2_CR2_REN); /**< Disable the Transmitter and Receiver before seting the LBCL, CPOL and CPHA bits */ UART2->CR3 &= (u8)~(UART2_CR3_CPOL | UART2_CR3_CPHA | UART2_CR3_LBCL); /**< Clear the Clock Polarity, lock Phase, Last Bit Clock pulse */ UART2->CR3 |= (u8)((u8)SyncMode & (u8)(UART2_CR3_CPOL | UART2_CR3_CPHA | UART2_CR3_LBCL)); /**< Set the Clock Polarity, lockPhase, Last Bit Clock pulse */
if ((u8)Mode & (u8)UART2_MODE_TX_ENABLE) { UART2->CR2 |= (u8)UART2_CR2_TEN; /**< Set the Transmitter Enable bit */ } else { UART2->CR2 &= (u8)(~UART2_CR2_TEN); /**< Clear the Transmitter Disable bit */ } if ((u8)Mode & (u8)UART2_MODE_RX_ENABLE) { UART2->CR2 |= (u8)UART2_CR2_REN; /**< Set the Receiver Enable bit */ } else { UART2->CR2 &= (u8)(~UART2_CR2_REN); /**< Clear the Receiver Disable bit */ } /**< Set the Clock Enable bit, lock Polarity, lock Phase and Last Bit Clock pulse bits according to UART2_Mode value */ if ((u8)SyncMode&(u8)UART2_SYNCMODE_CLOCK_DISABLE) { UART2->CR3 &= (u8)(~UART2_CR3_CKEN); /**< Clear the Clock Enable bit */ /**< configure in Push Pull or Open Drain mode the Tx I/O line bysetting the correct I/O Port register according the product package and
line configuration*/ } else { UART2->CR3 |= (u8)((u8)SyncMode & UART2_CR3_CKEN); }}
void UART2_Cmd(FunctionalState NewState){
if (NewState != DISABLE) { UART2->CR1 &= (u8)(~UART2_CR1_UARTD); /**< UART2 Enable */ } else { UART2->CR1 |= UART2_CR1_UARTD; /**< UART2 Disable (for low power consumption) */ }}
void UART2_ITConfig(UART2_IT_TypeDef UART2_IT, FunctionalState NewState) { u8 uartreg, itpos = 0x00; assert_param(IS_UART2_CONFIG_IT_OK(UART2_IT)); assert_param(IS_FUNCTIONALSTATE_OK(NewState)); /* Get the UART2 register index */ uartreg = (u8)(UART2_IT >> 0x08); /* Get the UART2 IT index */ itpos = (u8)((u8)1 << (u8)((u8)UART2_IT & (u8)0x0F)); if (NewState != DISABLE) { /**< Enable the Interrupt bits according to UART2_IT mask */ if (uartreg == 0x01) { UART2->CR1 |= itpos; } else if (uartreg == 0x02) { UART2->CR2 |= itpos; } else if (uartreg == 0x03) { UART2->CR4 |= itpos; } else { UART2->CR6 |= itpos; } } else { /**< Disable the interrupt bits according to UART2_IT mask */ if (uartreg == 0x01) { UART2->CR1 &= (u8)(~itpos); } else if (uartreg == 0x02) { UART2->CR2 &= (u8)(~itpos); } else if (uartreg == 0x03) { UART2->CR4 &= (u8)(~itpos); } else { UART2->CR6 &= (u8)(~itpos); } }}
u8 UART2_ReceiveData8(void) { return ((u8)UART2->DR);}
void UART2_SendData8(u8 Data) { /* Transmit Data */ UART2->DR = Data;}
FlagStatus UART2_GetFlagStatus(UART2_Flag_TypeDef UART2_FLAG) { FlagStatus status = RESET; /* Check parameters */ assert_param(IS_UART2_FLAG_OK(UART2_FLAG)); /* Check the status of the specified UART2 flag*/ if (UART2_FLAG == UART2_FLAG_LBDF) { if ((UART2->CR4 & (u8)UART2_FLAG) != (u8)0x00) { /* UART2_FLAG is set*/ status = SET; } else { /* UART2_FLAG is reset*/ status = RESET; } } else if (UART2_FLAG == UART2_FLAG_SBK) { if ((UART2->CR2 & (u8)UART2_FLAG) != (u8)0x00) { /* UART2_FLAG is set*/ status = SET; } else { /* UART2_FLAG is reset*/ status = RESET; } } else if ((UART2_FLAG == UART2_FLAG_LHDF) || (UART2_FLAG == UART2_FLAG_LSF)) { if ((UART2->CR6 & (u8)UART2_FLAG) != (u8)0x00) { /* UART2_FLAG is set*/ status = SET; } else { /* UART2_FLAG is reset*/ status = RESET; } } else { if ((UART2->SR & (u8)UART2_FLAG) != (u8)0x00) { /* UART2_FLAG is set*/ status = SET; } else { /* UART2_FLAG is reset*/ status = RESET; } } /* Return the UART2_FLAG status*/ return status;}
void UART2_ClearFlag(UART2_Flag_TypeDef UART2_FLAG) { assert_param(IS_UART2_CLEAR_FLAG_OK(UART2_FLAG)); /*< Clear the Receive Register Not Empty flag */ if (UART2_FLAG == UART2_FLAG_RXNE) { UART2->SR = (u8)~(UART2_SR_RXNE); } /*< Clear the LIN Break Detection flag */ else if (UART2_FLAG == UART2_FLAG_LBDF) { UART2->CR4 &= (u8)(~UART2_CR4_LBDF); } /*< Clear the LIN Header Detection Flag */ else if (UART2_FLAG == UART2_FLAG_LHDF) { UART2->CR6 &= (u8)(~UART2_CR6_LHDF); } /*< Clear the LIN Synch Field flag */ else { UART2->CR6 &= (u8)(~UART2_CR6_LSF); }}
STM8S 串口应用 UART2 STM8S105的更多相关文章
- DM8127 更改调试串口为UART2
1.uboot修改 1)修改宏定义 /*include/config/ti8148_evm.h*/ #define CONFIG_SYS_NS16550_COM2 0x48024000 #define ...
- STM8S和STM8L调试串口中断的注意点
1. STM8L串口中断注意点 在调试PM2.5传感器GP2Y1051的时候,发现在仿真的时候开始能够进行数据的接受,但是如果暂停之后就不能接受数据,其实只是接收了一次完整的数据. 问题程序 解决方法 ...
- Smart210学习记录------linux串口驱动
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=327609 一.核心数据结构 串口驱动有 ...
- WS103C8例程——串口2【worldsing笔记】
在超MINI核心板 stm32F103C8最小系统板上调试Usart2功能:用Jlink 6Pin接口连接WStm32f103c8的Uart2,PC机向mcu发送数据,mcu收到数据后数据加1,回传给 ...
- [RK3288][Android6.0] 调试笔记 --- 普通串口的添加 【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/54574073 标签: rk3288 串口添加 2017-01-16 14:52 1079 ...
- 树莓派4B串口测试与开发
参考文档: https://shumeipai.nxez.com/2021/08/09/raspberry-pi-4-activating-additional-uart-ports.html 树莓派 ...
- 初识STM8S105K心得!
最近由于公司项目需要STM8S105K这颗芯片,这两天我也捣鼓了下,正好现在开通了博客,以此记录下自己的工作. 开发环境: window10操作系统: IAR for ...
- STC12C5A60S2 双串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...
- stm8s103串口
#include "uart.h" #define UART2#define uart_115200 1 void Init_UART2(void){#ifdef UART2 ...
随机推荐
- QTP的基本功能介绍
• QTP的基本功能介绍 HP QuickTest Professional 支持功能測试和回归測试自己主动化,用于每一个主要软件应用程序和环境.此解决方式使用keyword驱动的測试概念,简化了測试 ...
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
Activity.finish()Call this when your activity is done and should be closed. 在你的activity动作完成的时候,或者Act ...
- 打开sa属性报错
--如果打开sa属性报错如下:无法显示请求的对话框.属性IsLocked不可用于“登录名sa".该对象可能没有此属性,也可能是访问权限不足而无法检索 --解决办法:首先用windows登录, ...
- 调用opencv打开不摄像头
调用opencv打开不摄像头,可以试试下面的语句: CvCapture* pCapture = cvCreateCameraCapture(0); 参数设为0 ,而不是-1,在自己电脑上可以 .
- Android调整TimePicker和DatePicker大小
最近写了个app,里面要将DatePicker和TimePicker并列显示.但是,Android内部把DatePicker和 TimePicker大小固定了,导致4.5寸手机屏幕一行只能显示出一个, ...
- stringstream clear()的疑问 - yuanshuilee的日志 - 网易博客
stringstream clear()的疑问 - yuanshuilee的日志 - 网易博客 stringstream clear()的疑问 2013-09-05 08:43:13| 分类: ...
- VirtualBox安装及使用说明和虚拟机安装XP系统图文教程
virtualbox是一款开源的虚拟机软件,它能够支持多种操作系统的安装如:Solaris.Windows.DOS.Linux.OS/2 Warp.BSD等系统作为client操作系统,而且最新版本号 ...
- (step8.2.7)hdu 1517(A Multiplication Game——巴什博弈变形)
题目大意:输入一个整数n.谁先报的数大于n,谁就输了.(初始值p == 1 , 后一个人报的数必须在前一个人报的数的基础上乘上(2 ~ 9)之间的任意一个数) 解题思路:巴什博奕的变形 1) 解题思 ...
- Microsoft Visual Studio International Pack 1.0 SR1--关于汉字转拼音
Microsoft Visual Studio International Pack 1.0 SR1————微软的一个类库 地址:http://www.microsoft.com/zh-cn/down ...
- 【linux】内核源代码下载与阅读
原创,转载时请注明,谢谢.邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http://blog. ...