|
之前买的STM32F0Discovery开发板一直没用,前几天才开始折腾,记录下第一个工程吧。 玩过STM32F10xx,发现F0开发方式和F1很接近,F1很多代码稍作修改便可移植到F0上。6 n- y; C9 {. O. z( Y0 H; d 基于IAR7.1建立工程。 E R7 c! z9 M& _. `$ X S! f ) M0 s% |- H) j, B7 m- J ' L; m+ V# i* i6 h: @( s 、、串口初始化 void Usart_Config(uint16_t Usart_BaudRate)4 { R" A* ?" P: Z: G0 ~) ~ {8 ^: {7 G2 |& G1 f* B& J0 D NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; 9 m2 }7 a0 x1 h RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //enable clock of GPIOA* l& L+ W' \+ @. H7 K, u RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //enable clock of USART1 ! H4 q' l& u4 k9 l /* Configure USART Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;: Z$ G: q" I5 y& n0 E GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;. z; S, S4 Z: m! O 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);% D& m' o* Q' Y# X% ?, G5 Y, i. E7 Z : _, K) L. G7 X) ` GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);//PA9 as Usart1_TX GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);//PA10 as Usart1_RX' f8 `! D8 @ l0 @# _ ' {6 P% L# \' a$ ~9 ^ USART_InitStructure.USART_BaudRate = Usart_BaudRate;2 o N1 `7 f% {. K USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No;' I! t- K+ G/ d/ U USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;) N( Y$ F; s8 ~- x; V' O/ F USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(USART1,&USART_InitStructure);5 ^$ z8 V! ?# h( k9 |( N3 V x , d; O B+ `5 ` |; p+ r NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;' o a9 L/ V: Q9 F NVIC_InitStructure.NVIC_IRQChannelPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);5 v* z: y) j' C% n3 ]9 L! r$ p 0 C6 [$ a! g) e$ X: O #if USART_RXNE_INTERRUPT , Z! L/ i$ v4 W# {9 C USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); #endif$ h4 z/ D) F# y J! Z) F1 E - W8 v; d2 m( n USART_Cmd(USART1, ENABLE);//enable USART13 n* q w0 t4 {; v, {( W9 _, y; B #if USART_TC_INTERRUPT 0 q6 n( r7 g' |) F" s2 J- ` USART_ClearFlag(USART1,USART_FLAG_TC); 6 X: a8 J2 {- A7 d k3 m USART_ITConfig(USART1,USART_IT_TC,ENABLE);# |& ^ a, \2 T6 o #endif }; \. Q, A# d. t/ J1 z4 |' L" o 在做GPIO复用功能映射的时候,第二个参数不要习惯性的写成GPIO_Pin_9,红色部分代码$ _! ^" M, Y) P% { 为方便代码裁剪,使用宏定义来控制。因为使能中断的时候会自动发送一个空闲帧,TC中断标志位会置位,所以TC中断开启的操作应当放在串口使能操作之后,并且开启TC中断之前应当清除一次TC中断标志位,否则一旦串口初始化完毕,就会进入TC中断。如上蓝色部分代码。 & j/ S; K! c: g! k5 v& } 、、发送字节8 n8 o9 n% M+ ]/ n; C' ^ void Usart_TxByte(uint8_t dat) { USART_SendData(USART1,dat);/ O7 t4 f0 w) S$ M8 q8 M$ O0 p while (USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);//wait untill transmitt complete } ( L; J+ C( ^0 u4 A1 ` ) c3 r, E: s& N! Y. \- G' _" h$ a 、、发送字符串9 F" @7 \. w% W - n D- ?7 y' s9 z5 j void Usart_TxString(uint8_t *string) {# _3 s3 n2 v- r8 H6 ~1 C- E U while(*string != '\0') Usart_TxByte(*string++);9 n" G- n$ _: G2 p/ t } ! f! ?% E, q* j* G) f 2 O7 ~; z0 {8 P0 r8 ~ 、、中断服务函数+ w2 V& A3 N3 L+ T8 ~7 C2 o2 Y+ t- o . A" y: ~5 R$ d, c8 Z2 a r <span style="font-size: small;">void USART1_IRQHandler(void)! q/ J! f, j5 S4 k+ m {' f% R3 } i& }0 B1 m/ } static uint8_t n = 0;+ e% e# g" d+ ~& C6 T 4 e, o* I \1 ] if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)) //ORE interrupt- T2 a) o0 g9 r6 ^+ h0 B 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/串口收发中断