之前买的STM32F0Discovery开发板一直没用,前几天才开始折腾,记录下第一个工程吧。' z3 \; F' p" M3 Q% E 玩过STM32F10xx,发现F0开发方式和F1很接近,F1很多代码稍作修改便可移植到F0上。8 g: o' L6 Q6 E 基于IAR7.1建立工程。9 C1 x; Q Y3 c" H9 _2 c& g' G! O 8 i8 Y9 p8 J, ^ " G1 j5 f0 o; u" t% X' D x' a+ r5 u0 ~: j- X8 t7 x 、、串口初始化8 z7 |5 H# E# u void Usart_Config(uint16_t Usart_BaudRate)9 N9 H# Y# Z* K/ W {3 M" ]" a5 P" ]& Y/ g- _. R2 [ NVIC_InitTypeDef NVIC_InitStructure; . a. s+ y: S9 M( g/ {8 s8 M GPIO_InitTypeDef GPIO_InitStructure;, u9 E* @+ }1 U# ~/ J L USART_InitTypeDef USART_InitStructure; / W2 x# W. E: ]% h2 Y7 _: @2 [ / e, E: h" f" L# { 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 */4 V3 ]& ?* L2 h1 K+ H$ d GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; z3 m; q8 e# E, M GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure);: c& |8 z6 f7 H# D8 C3 ] GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);//PA9 as Usart1_TX% A9 C6 h1 K5 ^, U$ ` GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);//PA10 as Usart1_RX 1 E3 N* W3 L) j+ l1 o USART_InitStructure.USART_BaudRate = Usart_BaudRate; USART_InitStructure.USART_WordLength = USART_WordLength_8b;' j* {% H. p6 U* `7 L USART_InitStructure.USART_StopBits = USART_StopBits_1;+ ~ h9 i4 y+ b- o% {4 f/ k USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;" O2 P( F$ w i6 r( v USART_Init(USART1,&USART_InitStructure);, x/ k" d9 k) R% O- t4 p NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;- ~2 x; I! \7 P0 v, E# O% } NVIC_InitStructure.NVIC_IRQChannelPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;) V$ t9 G# @- {4 j5 m NVIC_Init(&NVIC_InitStructure); ' }: Z+ s4 Q& {, I$ \ #if USART_RXNE_INTERRUPT USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); ~/ B3 R6 j. Y& P$ G2 R #endif 1 _; Z3 p2 G& `. N1 g USART_Cmd(USART1, ENABLE);//enable USART1 9 z: d, {5 U: d #if USART_TC_INTERRUPT USART_ClearFlag(USART1,USART_FLAG_TC); % W7 j9 Y2 b2 E% m# }: B USART_ITConfig(USART1,USART_IT_TC,ENABLE); #endif* f; W+ X: {* E1 j& r+ M7 X9 Z0 g } 在做GPIO复用功能映射的时候,第二个参数不要习惯性的写成GPIO_Pin_9,红色部分代码 为方便代码裁剪,使用宏定义来控制。因为使能中断的时候会自动发送一个空闲帧,TC中断标志位会置位,所以TC中断开启的操作应当放在串口使能操作之后,并且开启TC中断之前应当清除一次TC中断标志位,否则一旦串口初始化完毕,就会进入TC中断。如上蓝色部分代码。 x0 n9 d5 |- a9 k 、、发送字节1 [/ V( ~4 h2 T3 O2 b) z( } void Usart_TxByte(uint8_t dat)- `! T, F$ \0 s' q {7 Z4 T, M5 \; H8 K& O4 M" X USART_SendData(USART1,dat); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);//wait untill transmitt complete } 9 h" |9 {! o4 Q \) y: x , k; N3 p$ C# r7 j1 K ! l1 o) u: ^; a+ Q2 o9 G3 |- ^ 、、发送字符串$ x, e4 l1 N1 y# V void Usart_TxString(uint8_t *string) { while(*string != '\0') Usart_TxByte(*string++); } & F( _) V# {$ z 、、中断服务函数 <span style="font-size: small;">void USART1_IRQHandler(void) {0 H7 Q0 {, j. N4 y3 {; i static uint8_t n = 0;5 g, l4 K9 \4 u1 C- r5 W a. k5 P* o9 y + H! |5 w; H0 ~: s4 a* h if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)) //ORE interrupt- l! y. x- M) d t1 _9 a USART1->ICR |= 1 |
01--USART.rar
下载300.04 KB, 下载次数: 528
【管管推荐】STM32经验分享篇
STM32固件库分享,超全系列整理
三创电子(Tcreate)-STM32F030核心板代码
STM32F0 ADC(DMA中断)多通道,注释超详细
FreeRTOS在STM32F030上的移植
基于STM32移植而引发的疑问经验分享
分享STM32F051中文参考手册(重制书签版)
游名:STM32F0+Trinamic智能步进驱动芯片TMC5160(最高20A)参考原...
【MCU实战经验】+STM32F030的步进电机加减速
STM32F0的中文技术参考手册(标签处理过)
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/串口收发中断