一、简单demo
通过232串口,与上位机进行通信。首先保证单片机232串口与电脑的串口接口相连,当然电脑是USB接口,其实USB接口的实质也是串口。我们实现上位机发送一个16进制的数据,单片机接受到数据后显示,并且2倍发送给上位机。
1、usart_init();串口初始化
void usart_init() { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructrue; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);//打开GPIOA和USART时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //功能复用 IO 时钟 //GPIO初始化配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//TX PA9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出 GPIO_Init(GPIOA,&GPIO_InitStructrue); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//RX PA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入 GPIO_Init(GPIOA,&GPIO_InitStructure); //USART初始化配置 USART_InitStructure.USART_BaudRate = 9600; //波特率设置9600 USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //串口模式为 发送和接收模式 USART_Init(USART1,&USART_InitStructure); USART_Cmd(USART1,ENABLE); USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //打开发送中断,缓冲器有数据中断产生 USART_ClearFlag(USART1,USART_FLAG_TC);//清理发送完成标志位 //NVIC 中断配置 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //优先级分组1,有1位抢占式优先级,3位从优先级 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//打开USART1的全局中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级为 0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为 0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能 NVIC_Init(&NVIC_InitStructure); }12345678910111213141516171819202122232425262728293031323334
2、USART1_IRQHandler()串口中断函数
void USART1_IRQHandler(void) { static u8 d; USART_ClearFlag(USART1,USART_FLAG_TC);//当接收缓冲器非空时,接收数据 if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){ d = ReceiveData(USART1); d = 2*d; USART_Send(USART1,d);//检测发送完成标志位是否置1 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) != SET);} }12345678910111213
3、main()主函数
int main() { usart_init(); //串口1初始化 while(1); return 0; }123456
这 个主函数的效果是,设置串口波特率为 9600,在串口助手设置 HEX 发送和显
示,发送 16 进制数后加 1 进行显示。
4、串口调试助手设置
上一篇:STM32f10x系列工程建立演示
下一篇:STM32之USART 232串口通信<一>
推荐阅读最新更新时间:2024-03-16 15:37
设计资源 培训 开发板 精华推荐
- 征集|无线充电套件已经准备好,你打算用它做什么?
- 邀您注册 VICOR 电池化成与测试迷你站
- 【世健的ADI之路主题游】 第三站:了解物联网前沿器件与方案,打卡赢Kindle、《新概念模拟电路》
- 阅读是德科技 Power Supply、汽车电子精彩专题,让您的设计更精准!参与答题赢好礼!
- 免费下载 | 注册施耐德电气,下载《施耐德电气参考指南》白皮书
- 看视频赢京东卡 | 泰享实测之水哥秘籍
- #Micropython大作战#第二弹:发表mciropython原创教程赢好礼!
- 有奖直播:Microchip适用于CryptoAuthentication™系列的可信任平台
- 邀请小伙伴一起学AM437x,好礼有你!
- 新一轮EE_FPGA学习计划开始啦!