|
之前买的STM32F0Discovery开发板一直没用,前几天才开始折腾,记录下第一个工程吧。 玩过STM32F10xx,发现F0开发方式和F1很接近,F1很多代码稍作修改便可移植到F0上。4 M6 e9 ~/ r% H: C5 _4 K, m 基于IAR7.1建立工程。* X+ Q: _7 u! U5 z ' _: f1 c- B$ e$ d$ D. H. v' ] B; s' A7 u0 d* C" M( V ( q# Q, \8 j8 E9 i" F; E , P! {2 `9 o( a6 W 、、串口初始化$ i' c7 |' b% D# Y; m" O* Q+ S void Usart_Config(uint16_t Usart_BaudRate) { NVIC_InitTypeDef NVIC_InitStructure; & E6 w. b% }1 s6 I: Y GPIO_InitTypeDef GPIO_InitStructure;4 C! a1 \ `1 K& h Q* x USART_InitTypeDef USART_InitStructure; 4 U9 Q. |8 O( T, Y! _- q RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //enable clock of GPIOA RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //enable clock of USART1 /* Configure USART Tx as alternate function push-pull */" X) d. G" R& l GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;% B0 x/ O* e* D5 n' K C7 {' ~ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;& ~0 Y5 h6 T2 u! I. r GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;5 P% T6 x/ c4 J8 }" A: D2 l$ D' H2 s GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure);& _3 I3 u4 B. N( { GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);//PA9 as Usart1_TX GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);//PA10 as Usart1_RX USART_InitStructure.USART_BaudRate = Usart_BaudRate;/ k7 m% \ }$ N8 L2 `1 m USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;3 e/ x) B& m5 F! A USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(USART1,&USART_InitStructure);3 k+ V$ q8 j' j& s4 ~- e # t k) }# Y* p) C; Z* A NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;7 p- o1 X. {8 d6 _0 t; R NVIC_InitStructure.NVIC_IRQChannelPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); / [- n0 W5 f: o, |0 J) d8 s" F( D #if USART_RXNE_INTERRUPT 0 g) Y) w, R+ Q( t USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); #endif USART_Cmd(USART1, ENABLE);//enable USART12 B# K1 @, W9 p$ L2 a$ K5 e) h #if USART_TC_INTERRUPT * R6 m3 U! A+ Q$ ^1 g9 b USART_ClearFlag(USART1,USART_FLAG_TC); USART_ITConfig(USART1,USART_IT_TC,ENABLE);& h1 ^& R$ M* s7 i2 u! w #endif } 在做GPIO复用功能映射的时候,第二个参数不要习惯性的写成GPIO_Pin_9,红色部分代码 为方便代码裁剪,使用宏定义来控制。因为使能中断的时候会自动发送一个空闲帧,TC中断标志位会置位,所以TC中断开启的操作应当放在串口使能操作之后,并且开启TC中断之前应当清除一次TC中断标志位,否则一旦串口初始化完毕,就会进入TC中断。如上蓝色部分代码。% E1 F" o' H: N+ C- w$ ^ & f" p' H* m) I4 e E. L 9 Q1 x. p6 J5 A5 P* ]# r/ X 、、发送字节 # J/ d" N3 \+ i6 e0 d void Usart_TxByte(uint8_t dat) { USART_SendData(USART1,dat); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);//wait untill transmitt complete F7 z& X8 Q# C; b V. z } 3 V: C6 A7 S- s4 Q ; `" ]! g: \9 h* Z% W n& o0 Y. S% O 、、发送字符串# p( I7 N# c& d; W: V 8 p6 T4 ^9 O" K$ q& b void Usart_TxString(uint8_t *string) {, ^7 M: c* c) g( ^- y while(*string != '\0') Usart_TxByte(*string++); } 6 l, M. Q- `% U% P$ G$ A : T: M" L4 {, a, c # B0 p0 P& f4 `! Y' W% I 、、中断服务函数! \) l! E3 a+ v 9 s' J7 G. d; S4 V3 J# T* l <span style="font-size: small;">void USART1_IRQHandler(void) {2 ~( E" e2 }( j/ _6 c static uint8_t n = 0; 5 H! j' x! P: L if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)) //ORE interrupt5 ]8 o+ a% R0 u/ N1 x- G9 x USART1->ICR |= 1 |
01--USART.rar
下载300.04 KB, 下载次数: 528
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
小白也能明白的STM32的低功耗与唤醒机制
STM32系统中2种数据掉电保护的方法
分享STM32F051中文参考手册(重制书签版)
AI工具训练营-用ChatGPT解决HID Keyboard实现的问题
STM32固件库分享,超全系列整理
STM32小白入门指南:从基础到OTA实现方案
STM32超详细学习笔记
新手必看!STM32单片机应该怎么学?
如果你解决了这些问题,就可以直接学STM32
微信公众号
手机版
USART1->ICR |= 1 << 3;// USART_ReceiveData(USART1);这里一直执行,不知道能否解决?
RE:【原创】STM32F0第一个工程,LED/串口收发中断
RE:【原创】STM32F0第一个工程,LED/串口收发中断
RE:【原创】STM32F0第一个工程,LED/串口收发中断
RE:【原创】STM32F0第一个工程,LED/串口收发中断
RE:【原创】STM32F0第一个工程,LED/串口收发中断
回复:【原创】STM32F0第一个工程,LED/串口收发中断
支持!
第一次在论坛发帖,感谢管理员支持
回复:【原创】STM32F0第一个工程,LED/串口收发中断
回复:【原创】STM32F0第一个工程,LED/串口收发中断
回复:【原创】STM32F0第一个工程,LED/串口收发中断
回复:【原创】STM32F0第一个工程,LED/串口收发中断
RE:【原创】STM32F0第一个工程,LED/串口收发中断
回复:【原创】STM32F0第一个工程,LED/串口收发中断
回复:【原创】STM32F0第一个工程,LED/串口收发中断
RE:【原创】STM32F0第一个工程,LED/串口收发中断